Detectar el panel de control de las páginas “mi cuenta” de WooCommerce

6 minutos de lectura

avatar de usuario
René Meye

¿Cómo puedo detectar si la plantilla “myaccount/my-account.php” se usa en el Tablero?

Actualmente uso:

<?php
    global $wp;
    if ( !isset($wp->query_vars['page']) ) {
?>
    <a href="https://stackoverflow.com/mein-konto/">Back to my Account</a>
<?php } ?>

<div class="myaccount_content">
    <?php
        do_action( 'woocommerce_account_content' );
    ?>
</div>

Pero eso se siente un poco raro. ¿No hay algo como un is_myaccount_dashboard() ¿función?

avatar de usuario
LoicTheAztec

Actualizar: Detectando específicamente Mi cuenta “Tablero” página

<?php
    global $wp;
    $request = explode( "https://stackoverflow.com/", $wp->request );

    // If NOT in My account dashboard page
    if( ! ( end($request) == 'my-account' && is_account_page() ) ){ 
?>
    <a href="https://stackoverflow.com/questions/38444557/<?php echo get_permalink( get_option("woocommerce_myaccount_page_id')); ?>">Back to my Account Dashboard</a>
<?php 
    } 
?>

<div class="myaccount_content">
    <?php
        do_action( 'woocommerce_account_content' );
    ?>
</div>

Probado y funciona.


Respuesta original:

si claro que hay is_account_page() Condicional nativo de WooCommerce que devuelve verdadero en las páginas de la cuenta del cliente.

Aquí hay un ejemplo usando is_account_page() y is_user_logged_in(). Para obtener la URL del enlace de mi cuenta, puede usar: get_permalink( get_option('woocommerce_myaccount_page_id') ).

if ( !is_account_page() ) { // User is NOT on my account pages

    if ( is_user_logged_in() ) { // Logged in user

    // Link to "My Account pages dashboard". 
?>  
    <a href="https://stackoverflow.com/questions/38444557/<?php echo get_permalink( get_option("woocommerce_myaccount_page_id') ); ?>" title="<?php _e('My Account', 'woocommerce'); ?>"><?php _e( 'My Account', 'woocommerce' ); ?></a>
<?php }
    else { // User is NOT logged in

    // Link to "Login / register page".
?>  
    <a href="https://stackoverflow.com/questions/38444557/<?php echo get_permalink( get_option("woocommerce_myaccount_page_id') ); ?>" title="<?php _e( 'Login / Register','woocommerce' ); ?>"><?php _e( 'Login / Register', 'woocommerce' ); ?></a>

<?php 
    } 
} 
?>

Referencia:


Después de eso puedes Anular las plantillas de WooCommerce a través de un tema usando las plantillas de mi cuenta para afinar aún más los comportamientos de WooCommerce…

  • is_account_page() no se puede usar para detectar ‘el tablero’ de las páginas de ‘mi cuenta’; esta función devuelve verdadero para todas las páginas de ‘mi cuenta’.

    – Dan.

    21 de diciembre de 2017 a las 12:15

  • @Dan. Sí, lo sé… “¿Cómo puedo detectar si el “myaccount/my-account.php””

    – LoicTheAztec

    21 de diciembre de 2017 a las 12:39

  • su respuesta original no resolvió la pregunta (ni la del título de la pregunta, ni la que está dentro de la pregunta). Acabas de publicar algo que resuelve su pregunta, pero esto obviamente no invalida mi comentario anterior y mi voto negativo. Quien haya votado negativamente mi respuesta (sin señalar con el dedo) obviamente solo tenía un hueso para recoger. Mi solución definitivamente resuelve la pregunta jajaja

    – Dan.

    21 de diciembre de 2017 a las 17:24


  • @Dan. Eres realmente muy listo, inteligente y maduro. ¡Felicidades!

    – LoicTheAztec

    21/12/2017 a las 18:00


  • Sé quien soy. Creo que estoy estructurando bastante bien mi argumento. Estoy bastante seguro de que todo lo que dije en mi comentario anterior es válido. ¿Por qué no me explica por qué su respuesta original resolvió las preguntas y tal vez pueda persuadirme de que estoy equivocado/tengo el punto de vista equivocado? Con respecto al voto negativo, estoy bastante seguro de que una respuesta que no responde a la pregunta es la base para un voto negativo. Sobre todo, estoy decepcionado conmigo mismo por permitir que esto ocupe mi tiempo, cuando no voy a beneficiarme de ello. Solo soy humano, supongo.

    – Dan.

    21 de diciembre de 2017 a las 18:15

Para detectar la página exacta en la que se encuentra, dentro del área Mi cuenta (para permitirle determinar qué plantilla se está utilizando), no creo que Woocommerce proporcione una forma.

Creo que tendrá que obtener la URL actual, con PHP estándar, y compararla con la URL de la página que está configurada como Panel de control/Página de inicio de Mi cuenta.

p.ej

$current_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

$dashboard_url = get_permalink( get_option('woocommerce_myaccount_page_id'));

if($dashboard_url == $current_url){
    // do your stuff here
}

de Woocommerce is_account_page() la función condicional devolverá verdadero para TODAS las subpáginas de Mi cuenta, por lo que no se puede usar para determinar si está específicamente en la página del Panel de control.

  • Esto funciona muy bien. No estoy seguro de por qué esta no es la respuesta.

    – karlosuccess

    26 de abril de 2021 a las 9:08

Yo tenía la misma pregunta (años después, lol). Para las personas que buscan la respuesta y se preguntan por qué no es útil, hay funciones de detección de puntos finales disponibles en woocommerce que hacen exactamente lo que está buscando. Puede leer la lista de funciones disponibles aquí.

Esto se toma directamente de los documentos de woocommerce. Solo lo estoy copiando por si acaso el enlace se rompe en el futuro.

is_account_page() => Devuelve verdadero en las páginas de la cuenta del cliente.

is_wc_endpoint_url() => Devuelve verdadero al ver cualquier punto final de WooCommerce

is_wc_endpoint_url( ‘order-pay’ ) => Cuando se muestra la página de punto final para el pago del pedido.

is_wc_endpoint_url( ‘order-received’ ) => Cuando se muestra la página de punto final para el pedido recibido.

is_wc_endpoint_url( ‘view-order’ ) => Cuando se muestra la página de punto final para ver el pedido.

is_wc_endpoint_url( ‘edit-account’ ) => Cuando se muestra la página de punto final para editar cuenta.

is_wc_endpoint_url( ‘edit-address’ ) => Cuando se muestra la página de punto final para editar la dirección.

is_wc_endpoint_url( ‘lost-password’ ) => Cuando se muestra la página de punto final para contraseña perdida.

is_wc_endpoint_url( ‘customer-logout’ ) => Cuando se muestra la página de punto final para el cierre de sesión del cliente.

is_wc_endpoint_url( ‘add-payment-method’ ) => Cuando se muestra la página de punto final para agregar el método de pago.

En realidad, descubrí esta condición que parece funcionar bien para detectar la página WC Dashboard solo con código WC nativo:

    if (is_user_logged_in() && is_account_page() && !is_wc_endpoint_url()) {
      echo 'WC Dashboard';
    } else {
      echo 'no WC Dashboard';
    }

<?php if(is_page("account") && !is_wc_endpoint_url()) { ?>

Suponiendo que la página de su cuenta esté en /cuenta/, esto detectará su tablero.

Si solo hicieras is_page("account"), el condicional se activaría para todas las páginas de la cuenta. Sin embargo, debido a que el tablero no se considera un punto final de WC como lo es ‘ver orden’ o ‘última contraseña’, esta simple verificación hará el trabajo.

¿Ha sido útil esta solución?