WooCommerce: cambiar la pestaña predeterminada de mi cuenta

Publicado: 2022-08-02

Como sabe, una vez que inicia sesión y va a Mi cuenta, WooCommerce muestra el contenido de la pestaña "Panel" (también llamado "punto final" del Panel). La pestaña Tablero presenta el predeterminado " Hola Rodolfo Melogli (¿no Rodolfo Melogli? Cerrar sesión) Desde el tablero de su cuenta puede ver sus pedidos recientes, administrar sus direcciones de envío y facturación, y editar su contraseña y detalles de la cuenta. " mensaje.

Ahora, ¿qué sucede si queremos configurar otra pestaña de Mi cuenta como la predeterminada al iniciar sesión, por ejemplo, la de "Pedidos" o la de "Descargas" para un negocio de WooCommerce de descargas digitales? Bueno, hay un par de soluciones rápidas y no tan rápidas, ¡disfrútalo!

Con el fragmento 2 que encontrará a continuación, pude configurar la pestaña "Descargas" como predeterminada cuando un usuario llega a la página Mi cuenta. Además, se conserva la pestaña "Panel de control", a diferencia de la solución que ofrece Snippet 1.

Fragmento de PHP 1: redirigir a los usuarios a otra pestaña de Mi cuenta

Al redirigir a otra pestaña cuando las personas visitan el "Panel de control", simplemente estamos diciendo que deseamos ocultar todo el contenido de la pestaña del Panel de control . También deberá eliminar la pestaña Panel del menú Mi cuenta.

/**
 * @snippet       Redirect to new default tab @ WooCommerce My Account
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 6
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

add_action( 'template_redirect', 'bbloomer_my_account_redirect_to_downloads' );

function bbloomer_my_account_redirect_to_downloads(){
	if ( is_account_page() && empty( WC()->query->get_current_endpoint() ) ) {
		wp_safe_redirect( wc_get_account_endpoint_url( 'orders' ) );
		exit;
	}
}

En este caso hemos escogido la pestaña de “pedidos”. Puede encontrar otros ID de la pestaña Mi cuenta de WooCommerce mirando esta otra publicación.

Fragmento de PHP 2: establezca otra pestaña de Mi cuenta como predeterminada (pero conserve el panel)

Es posible que no desee ocultar la pestaña Panel de control en absoluto, y simplemente establezca otra como la pestaña predeterminada . En este caso, no podemos usar el fragmento de redirección, ya que, de lo contrario, el Tablero nunca se mostrará.

Desafortunadamente, a partir de hoy, no existe una solución limpia (incluso si reordena las pestañas de Mi cuenta, el contenido de la pestaña del Panel de control se mostrará en la carga), necesitamos encontrar una solución alternativa.

Esta solución:

  1. reemplaza el contenido de la pestaña "Panel de control" por el contenido de la pestaña de su elección (por ejemplo, el contenido de la pestaña "Descargas")
  2. cambia el nombre del título de la pestaña "Tablero" a lo que quieras ("Descargas" en nuestro ejemplo)
  3. oculta la pestaña original de "Descargas" como ya la tenemos ahora
  4. vuelve a agregar la pestaña "Panel de control" como primera pestaña junto con su contenido

Parte 1: reemplazar el contenido de la pestaña Panel con el contenido de la pestaña Descargas

Tenga en cuenta que woocommerce_account_downloads() es la función responsable de generar la pestaña Descargas. Puedes encontrar el contenido de las otras pestañas en este otro tutorial.

/**
 * @snippet       Replace tab content @ WooCommerce My Account
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 6
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

add_action( 'woocommerce_account_content', 'bbloomer_myaccount_replace_dashboard_content', 1 );

function bbloomer_myaccount_replace_dashboard_content() {
	remove_action( 'woocommerce_account_content', 'woocommerce_account_content', 10 );
	add_action( 'woocommerce_account_content', 'bbloomer_account_content' );
}

function bbloomer_account_content() {
	global $wp;
	if ( empty( $query_vars = $wp->query_vars ) || ( ! empty( $query_vars ) && ! empty( $query_vars['pagename'] ) ) ) {
		woocommerce_account_downloads();
	} else {
		foreach ( $wp->query_vars as $key => $value ) {
			if ( 'pagename' === $key ) {
				continue;
			}
			if ( has_action( 'woocommerce_account_' . $key . '_endpoint' ) ) {
				do_action( 'woocommerce_account_' . $key . '_endpoint', $value );
				return;
			}
		}
	}
}

Parte 2: cambie el nombre del título de la pestaña Panel a Descargas

/**
 * @snippet       Rename tab @ WooCommerce My Account
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 6
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

add_filter( 'woocommerce_account_menu_items', 'bbloomer_myaccount_rename_dashboard_tab_title', 9999 );
 
function bbloomer_myaccount_rename_dashboard_tab_title( $items ) {
   $items['dashboard'] = 'Downloads';
   return $items;
}

Parte 3: eliminar la pestaña Descargas original

/**
 * @snippet       Remove tab @ WooCommerce My Account
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 6
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

add_filter( 'woocommerce_account_menu_items', 'bbloomer_myaccount_remove_orders_tab', 9999 );
 
function bbloomer_myaccount_remove_orders_tab( $items ) {
   unset( $items['downloads'] );
   return $items;
}

Parte 4 – Pestaña Readd Dashboard

Nota: debe volver a guardar los enlaces permanentes de WordPress una vez que el fragmento esté activo.

/**
 * @snippet       Readd Dashboard tab @ WooCommerce My Account
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 6
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

add_action( 'init', 'bbloomer_myaccount_add_dashboard_endpoint' );
  
function bbloomer_myaccount_add_dashboard_endpoint() {
    add_rewrite_endpoint( 'mydashboard', EP_ROOT | EP_PAGES );
}

add_filter( 'query_vars', 'bbloomer_query_vars', 0 );
  
function bbloomer_query_vars( $vars ) {
    $vars[] = 'mydashboard';
    return $vars;
}
  
add_filter( 'woocommerce_account_menu_items', 'bbloomer_add_new_dashboard_to_my_account' );
  
function bbloomer_add_new_dashboard_to_my_account( $items ) {
	$items = array( 'mydashboard' => 'Dashboard' ) + $items;
    return $items;
}