Personalice el nuevo elemento de menú de mi cuenta para un rol de usuario específico en Woocommerce

2 minutos de lectura

avatar de usuario
gdailey

He creado algunos puntos finales personalizados de “Mi cuenta” para Woocommerce. Estoy tratando de limitar uno para que sea visible por rol de usuario. Para el siguiente código, me gustaría que solo sea visible para un usuario con el rol de administrador. He intentado insertar un condicional if (current_user_can('administrator')) en mi código, pero no he encontrado una manera que no rompa el sitio. ¿Alguna sugerencia de cómo modificar lo siguiente?

/* Create Admin Tab on Woo Account Page
------------------------------------------------------------------*/

function add_admin_tools_endpoint() {
 add_rewrite_endpoint( 'admin-tools', EP_ROOT | EP_PAGES );
}

add_action( 'init', 'add_admin_tools_endpoint' );

function add_admin_tools_query_vars( $vars ) {
 $vars[] = 'admin-tools';
 return $vars;
}

add_filter( 'query_vars', 'add_admin_tools_query_vars', 0 );

function add_admin_tools_link_my_account( $items ) {
 $items['admnin-tools'] = 'Admin';
 return $items;
}

add_filter( 'woocommerce_account_menu_items', 'add_admin_tools_link_my_account' );

function add_admin_tools_content() {
 echo "<h3 style="text-align:center;">Administration Tools</h3>&nbsp;<p style="text-align:center;">Test of various functions.</p>";
}

add_action( 'woocommerce_account_admin-tools_endpoint', 'add_admin_tools_content' );

Esta es la forma correcta de habilitar y mostrar un elemento de menú Mi cuenta personalizado con su contenido solo para una función de usuario específica (aquí rol de usuario “administrador”):

add_action( 'init', 'add_admin_tools_account_endpoint' );
function add_admin_tools_account_endpoint() {
    add_rewrite_endpoint( 'admin-tools', EP_PAGES );
}

add_filter ( 'woocommerce_account_menu_items', 'custom_account_menu_items', 10 );
function custom_account_menu_items( $menu_links ){
    if ( current_user_can('administrator') ) {
        $menu_links = array_slice( $menu_links, 0,3 , true )
        + array( 'admin-tools' => __('Admin tools') )
        + array_slice( $menu_links, 3, NULL, true );
    }
    return $menu_links;
}

add_action( 'woocommerce_account_admin-tools_endpoint', 'admin_tools_account_endpoint_content' );
function admin_tools_account_endpoint_content() {
    if ( current_user_can('administrator') ) {
        echo "<h3 style="text-align:center;">Administration Tools</h3>
        <p style="text-align:center;">Test of various functions.</p>";
    }
}

El código va en el archivo function.php de su tema secundario activo (o tema activo). Probado y trabajo.

Deberá actualizar las reglas de reescritura: En el administrador de WordPress, en “Configuración” > Enlaces permanentes, simplemente haga clic en el botón “Guardar cambios” una vez. Estás listo.

  • Funcionó perfectamente. ¡Gracias!

    – GDailey

    3 de diciembre de 2018 a las 19:33

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad