This commit introduces a more reliable and consistent approach to setting up the development environment using backups: - Add setup-from-backup.sh script for environment setup from existing backups - Standardize script naming and organization - Move obsolete scripts to bin/obsolete directory - Update documentation with new workflow instructions - Create migration guide for transitioning to new workflow - Update Memory Bank with workflow improvements The new workflow provides: - More reliable environment setup - Faster setup process - Offline development capability - Consistent development environments across team members Breaking changes: - setup-dev.sh is replaced by setup-from-backup.sh - sync-and-setup.sh is replaced by separate scripts - verify-with-wpcli.sh is no longer used Migration path is documented in MIGRATION_GUIDE.md
		
			
				
	
	
		
			340 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			340 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * UserRegistration Page Functions
 | |
|  *
 | |
|  * Functions related to pages and menus.
 | |
|  *
 | |
|  * @package  UserRegistration/Functions
 | |
|  * @version  1.0.0
 | |
|  */
 | |
| 
 | |
| if ( ! defined( 'ABSPATH' ) ) {
 | |
| 	exit; // Exit if accessed directly.
 | |
| }
 | |
| 
 | |
| add_filter( 'body_class', 'ur_body_class' );
 | |
| 
 | |
| // Hooks for my account section.
 | |
| add_action( 'user_registration_account_navigation', 'user_registration_account_navigation' );
 | |
| add_action( 'user_registration_account_content', 'user_registration_account_content' );
 | |
| add_action( 'user_registration_account_dashboard_endpoint', 'user_registration_account_dashboard' );
 | |
| add_action( 'user_registration_account_edit-profile_endpoint', 'user_registration_account_edit_profile' );
 | |
| add_action( 'user_registration_account_edit-password_endpoint', 'user_registration_account_edit_account' );
 | |
| 
 | |
| /**
 | |
|  * Replace a page title with the endpoint title.
 | |
|  *
 | |
|  * @param  string $title Page Title.
 | |
|  *
 | |
|  * @return string
 | |
|  */
 | |
| function ur_page_endpoint_title( $title ) {
 | |
| 	global $wp_query;
 | |
| 
 | |
| 	if ( ! is_null( $wp_query ) && ! is_admin() && is_main_query() && in_the_loop() && is_page() && is_ur_endpoint_url() ) {
 | |
| 		$endpoint       = UR()->query->get_current_endpoint();
 | |
| 		$endpoint_title = UR()->query->get_endpoint_title( $endpoint );
 | |
| 
 | |
| 		if ( ! empty( $endpoint_title ) ) {
 | |
| 			$title = $endpoint_title;
 | |
| 		}
 | |
| 
 | |
| 		remove_filter( 'the_title', 'ur_page_endpoint_title' );
 | |
| 	}
 | |
| 
 | |
| 	return $title;
 | |
| }
 | |
| 
 | |
| add_filter( 'the_title', 'ur_page_endpoint_title', 10 );
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Retrieve page ids - used for myaccount, edit_profile. returns -1 if no page is found.
 | |
|  *
 | |
|  * @param  string $page Page ID.
 | |
|  *
 | |
|  * @return int
 | |
|  */
 | |
| function ur_get_page_id( $page ) {
 | |
| 	$my_account_page_id = get_option( 'user_registration_myaccount_page_id' );
 | |
| 	$page_id            = get_the_ID();
 | |
| 
 | |
| 	if ( 'myaccount' == $page || 'login' == $page ) {
 | |
| 		$page_id = ! empty( $my_account_page_id ) ? $my_account_page_id : $page_id;
 | |
| 	}
 | |
| 	if ( function_exists( 'pll_current_language' ) ) {
 | |
| 		$current_language = pll_current_language();
 | |
| 		if ( ! empty( $current_language ) ) {
 | |
| 			$translations = pll_get_post_translations( $page_id );
 | |
| 			$page_id      = isset( $translations[ pll_current_language() ] ) ? $translations[ pll_current_language() ] : $page_id;
 | |
| 		}
 | |
| 	} elseif ( class_exists( 'SitePress', false ) ) {
 | |
| 		$page_id = ur_get_wpml_page_language( $page_id );
 | |
| 	}
 | |
| 
 | |
| 	return $page_id ? absint( $page_id ) : - 1;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get the right page id for the current language.
 | |
|  *
 | |
|  * @param int $page_id Page ID.
 | |
|  */
 | |
| function ur_get_wpml_page_language( $page_id ) {
 | |
| 	global $wpdb;
 | |
| 	/**
 | |
| 	 * Filters the current language for WPML (WordPress Multilingual).
 | |
| 	 *
 | |
| 	 * The 'wpml_current_language' filter allows developers to modify the current language
 | |
| 	 * used by the WPML plugin. In this instance, it sets the current language to English ('en').
 | |
| 	 *
 | |
| 	 * @param string $current_language The original current language.
 | |
| 	 */
 | |
| 	$current_language = apply_filters( 'wpml_current_language', 'en' );
 | |
| 
 | |
| 	$element_prepared = $wpdb->prepare(
 | |
| 		"SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_id=%d AND element_type=%s",
 | |
| 		array( $page_id, 'post_page' )
 | |
| 	);
 | |
| 	$trid       = $wpdb->get_var( $element_prepared ); //phpcs:ignore.
 | |
| 
 | |
| 	if ( $trid > 0 ) {
 | |
| 		$page_id = $trid;
 | |
| 	}
 | |
| 
 | |
| 	$element_prepared = $wpdb->prepare(
 | |
| 		"SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND element_type=%s AND language_code=%s",
 | |
| 		array( $page_id, 'post_page', $current_language )
 | |
| 	);
 | |
| 	$element_id       = $wpdb->get_var( $element_prepared ); //phpcs:ignore.
 | |
| 	return $element_id > 0 ? $element_id : $page_id;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Retrieve page permalink.
 | |
|  *
 | |
|  * @param string $page Page ID.
 | |
|  *
 | |
|  * @return string
 | |
|  */
 | |
| function ur_get_page_permalink( $page ) {
 | |
| 	$page_id = ur_get_page_id( $page );
 | |
| 	$page    = $page_id;
 | |
| 
 | |
| 	if ( $page_id > 0 && function_exists( 'pll_current_language' ) ) {
 | |
| 		$current_language = pll_current_language();
 | |
| 		if ( ! empty( $current_language ) ) {
 | |
| 			$translations = pll_get_post_translations( $page_id );
 | |
| 			$page         = isset( $translations[ pll_current_language() ] ) ? $translations[ pll_current_language() ] : $page_id;
 | |
| 		}
 | |
| 	} elseif ( $page_id > 0 && class_exists( 'SitePress', false ) ) {
 | |
| 		$page = ur_get_wpml_page_language( $page_id );
 | |
| 	}
 | |
| 
 | |
| 	$permalink = 0 < $page ? get_permalink( $page ) : ( 0 < $page_id ? get_permalink( $page_id ) : get_home_url() );
 | |
| 	/**
 | |
| 	 * Filters the permalink for a specific page.
 | |
| 	 *
 | |
| 	 * The dynamic 'user_registration_get_{page}_page_permalink' filter allows developers
 | |
| 	 * to modify the permalink for a specific page. The {page}
 | |
| 	 * placeholder is replaced with the actual page identifier, providing a flexible way to
 | |
| 	 * customize the permalink based on the original permalink.
 | |
| 	 *
 | |
| 	 * @param string $permalink The original permalink for the specific page.
 | |
| 	 */
 | |
| 	return apply_filters( 'user_registration_get_' . $page . '_page_permalink', $permalink );
 | |
| }
 | |
| 
 | |
| if ( ! function_exists( 'ur_get_login_url' ) ) {
 | |
| 	/**
 | |
| 	 * Returns the full url of the login redirection page.
 | |
| 	 *
 | |
| 	 * @return string Complete Login Page address.
 | |
| 	 */
 | |
| 	function ur_get_login_url() {
 | |
| 		$my_account_page_id = absint( get_option( 'user_registration_login_options_login_redirect_url', 'unset' ) );
 | |
| 
 | |
| 		if ( $my_account_page_id > 0 && function_exists( 'pll_current_language' ) ) {
 | |
| 			$current_language = pll_current_language();
 | |
| 			if ( ! empty( $current_language ) ) {
 | |
| 				$translations       = pll_get_post_translations( $my_account_page_id );
 | |
| 				$my_account_page_id = isset( $translations[ pll_current_language() ] ) ? $translations[ pll_current_language() ] : $my_account_page_id;
 | |
| 			}
 | |
| 		} elseif ( $my_account_page_id > 0 && class_exists( 'SitePress', false ) ) {
 | |
| 			$my_account_page_id = ur_get_wpml_page_language( $my_account_page_id );
 | |
| 		}
 | |
| 
 | |
| 		$permalink = 0 < $my_account_page_id ? get_permalink( $my_account_page_id ) : '';
 | |
| 
 | |
| 		return $permalink;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| if ( ! function_exists( 'ur_get_my_account_url' ) ) {
 | |
| 	/**
 | |
| 	 * Returns the full url of the selected My Account page.
 | |
| 	 *
 | |
| 	 * If My Account Page is not set:
 | |
| 	 * 1. Checks if Prevent Core Login is enabled.
 | |
| 	 * 2. Returns Login Redirection Page url if set.
 | |
| 	 * 3. Else, returns default WordPress login url.
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	function ur_get_my_account_url() {
 | |
| 		$my_account_page_id = get_option( 'user_registration_myaccount_page_id' );
 | |
| 
 | |
| 		if ( $my_account_page_id > 0 && function_exists( 'pll_current_language' ) ) {
 | |
| 			$current_language = pll_current_language();
 | |
| 			if ( ! empty( $current_language ) ) {
 | |
| 				$translations       = pll_get_post_translations( $my_account_page_id );
 | |
| 				$my_account_page_id = isset( $translations[ pll_current_language() ] ) ? $translations[ pll_current_language() ] : $my_account_page_id;
 | |
| 			}
 | |
| 		} elseif ( $my_account_page_id > 0 && class_exists( 'SitePress', false ) ) {
 | |
| 			$my_account_page_id = ur_get_wpml_page_language( $my_account_page_id );
 | |
| 		}
 | |
| 
 | |
| 		$permalink = 0 < $my_account_page_id ? get_permalink( $my_account_page_id ) : '';
 | |
| 
 | |
| 		if ( $permalink ) {
 | |
| 			if ( '/' !== substr( $permalink, -1 ) ) {
 | |
| 				$permalink = $permalink . '/';
 | |
| 			}
 | |
| 			return $permalink;
 | |
| 		}
 | |
| 
 | |
| 		$prevent_core_login = ur_option_checked( 'user_registration_login_options_prevent_core_login', false );
 | |
| 
 | |
| 		if ( $prevent_core_login ) {
 | |
| 			$login_redirect_page_id = get_option( 'user_registration_login_options_login_redirect_url', 'unset' );
 | |
| 
 | |
| 			if ( 0 < $login_redirect_page_id ) {
 | |
| 				$permalink = get_permalink( $login_redirect_page_id );
 | |
| 				if ( '/' !== substr( $permalink, -1 ) ) {
 | |
| 					$permalink = $permalink . '/';
 | |
| 				}
 | |
| 				return $permalink;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return wp_login_url();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| if ( ! function_exists( 'ur_get_current_language' ) ) {
 | |
| 	/**
 | |
| 	 * Returns the Current Language Code.
 | |
| 	 *
 | |
| 	 * @return string Current Language Code.
 | |
| 	 */
 | |
| 	function ur_get_current_language() {
 | |
| 		$current_language = get_bloginfo( 'language' );
 | |
| 
 | |
| 		if ( function_exists( 'pll_current_language' ) ) {
 | |
| 			$current_language = pll_current_language();
 | |
| 		} elseif ( class_exists( 'SitePress', false ) ) {
 | |
| 			/**
 | |
| 			 * Filters the current language for WPML (WordPress Multilingual).
 | |
| 			 *
 | |
| 			 * The 'wpml_current_language' filter allows developers to modify the current language
 | |
| 			 * used by the WPML plugin. It provides an opportunity to customize the current language
 | |
| 			 * based on the original value of $current_language.
 | |
| 			 *
 | |
| 			 * @param string $current_language The original current language.
 | |
| 			 */
 | |
| 			$current_language = apply_filters( 'wpml_current_language', $current_language );
 | |
| 		}
 | |
| 		return $current_language;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get endpoint URL.
 | |
|  *
 | |
|  * Gets the URL for an endpoint, which varies depending on permalink settings.
 | |
|  *
 | |
|  * @param  string $endpoint Endpoint.
 | |
|  * @param  string $value Value.
 | |
|  * @param  string $permalink Permalink.
 | |
|  *
 | |
|  * @return string
 | |
|  */
 | |
| function ur_get_endpoint_url( $endpoint, $value = '', $permalink = '' ) {
 | |
| 	if ( ! $permalink ) {
 | |
| 		$permalink = get_permalink();
 | |
| 	}
 | |
| 
 | |
| 	// Map endpoint to options.
 | |
| 	$endpoint = isset( UR()->query->query_vars[ $endpoint ] ) ? UR()->query->query_vars[ $endpoint ] : $endpoint;
 | |
| 
 | |
| 	if ( get_option( 'permalink_structure' ) ) {
 | |
| 		if ( strstr( $permalink, '?' ) ) {
 | |
| 			$query_string = '?' . parse_url( $permalink, PHP_URL_QUERY );
 | |
| 			$permalink    = current( explode( '?', $permalink ) );
 | |
| 		} else {
 | |
| 			$query_string = '';
 | |
| 		}
 | |
| 		$url = trailingslashit( $permalink ) . $endpoint . '/' . $value . $query_string;
 | |
| 	} else {
 | |
| 		$url = add_query_arg( $endpoint, $value, $permalink );
 | |
| 	}
 | |
| 
 | |
| 	if (
 | |
| 		get_option( 'user_registration_logout_endpoint', 'user-logout' ) === $endpoint &&
 | |
| 		ur_option_checked( 'user_registration_disable_logout_confirmation', false ) ) {
 | |
| 		$url = wp_nonce_url( $url, 'user-logout' );
 | |
| 	}
 | |
| 	/**
 | |
| 	 * Filters the endpoint URL in User Registration.
 | |
| 	 *
 | |
| 	 * The 'user_registration_get_endpoint_url' filter allows developers to modify
 | |
| 	 * the endpoint URL in the User Registration plugin. It provides an opportunity
 | |
| 	 * to customize the URL based on the original URL, endpoint, value, and permalink.
 | |
| 	 *
 | |
| 	 * @param string $url       The original endpoint URL.
 | |
| 	 * @param string $endpoint  The endpoint identifier.
 | |
| 	 * @param mixed  $value     The value associated with the endpoint.
 | |
| 	 * @param bool   $permalink Whether to use permalinks.
 | |
| 	 */
 | |
| 	return apply_filters( 'user_registration_get_endpoint_url', $url, $endpoint, $value, $permalink );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Hide menu items conditionally.
 | |
|  *
 | |
|  * @param  array $items Navigation items.
 | |
|  * @return array
 | |
|  */
 | |
| function ur_nav_menu_items( $items ) {
 | |
| 
 | |
| 	if ( ! is_user_logged_in() ) {
 | |
| 		$customer_logout = get_option( 'user_registration_logout_endpoint', 'user-logout' );
 | |
| 
 | |
| 		if ( ! empty( $customer_logout ) && is_array( $items ) ) {
 | |
| 			foreach ( $items as $key => $item ) {
 | |
| 				if ( empty( $item->url ) ) {
 | |
| 					continue;
 | |
| 				}
 | |
| 				$path  = parse_url( $item->url, PHP_URL_PATH ) ?? ''; //phpcs:ignore;
 | |
| 				$query = parse_url( $item->url, PHP_URL_QUERY ) ?? ''; //phpcs:ignore;
 | |
| 
 | |
| 				$customer_logout = $customer_logout ?? ''; //phpcs:ignore;
 | |
| 
 | |
| 				if ( strstr( $path, $customer_logout ) !== false || strstr( $query, $customer_logout ) !== false ) {
 | |
| 						unset( $items[ $key ] );
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	$customer_logout = get_option( 'user_registration_logout_endpoint', 'user-logout' );
 | |
| 
 | |
| 	foreach ( $items as $item ) {
 | |
| 
 | |
| 		if ( 0 === strpos( $item->post_name, 'logout' ) && ! empty( $customer_logout ) && ur_option_checked( 'user_registration_disable_logout_confirmation', false ) ) {
 | |
| 			$item->url = wp_nonce_url( $item->url, 'user-logout' );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return $items;
 | |
| }
 | |
| add_filter( 'wp_nav_menu_objects', 'ur_nav_menu_items', 10 );
 |