Soporte » WordPress Avanzado » Conditional tag para cuando el admin no está conectado
Conditional tag para cuando el admin no está conectado
-
Buenas tardes.
A ver. No sé si se podrá hacer esto. Estoy buscando la función que lo haga, pero no doy con lo que quiero.
Tengo una función que quiero que se aplique solo cuando el usuario logueado sea distinto de admin y editor.
He probado con current_user_can( ‘administrador’ ), pero nada.
¡Gracias!
-
Hola,
Primero te comento quecurrent_user_can
comprueba las capacidades del usuario no el rol que es lo que tienes puesto en el ejemplo.Lo que tienes que hacer es recibir la info del usuario registrado y comprobar el rol.
Ejemplo:
if ( is_user_logged_in() ) { $user = wp_get_current_user(); if ( ! empty( $user->roles ) ) { $roles = $user->roles; } }
Te comento que
$roles
es un array con todos los roles del usuario.Enlaces de informacion o aprendizaje:
– https://codex.wordpress.org/Roles_and_Capabilities
– https://developer.wordpress.org/reference/functions/current_user_can
– https://developer.wordpress.org/reference/functions/wp_get_current_userHola.
Gracias por la respuesta. Entiendo lo que dices después de ver lo que me comentas y leer la información adicional que me adjuntas, salvo una parte. Es esta:
if ( ! empty( $user->roles ) ) { $roles = $user->roles; }
Si quisiera adaptarlo a mi caso, supongo que tendría que cambiar roles por administrador, y luego añadir el resto de cógido que tengo, ¿no? Es decir, así:
if ( ! empty( $user->administrator) ) { $roles = $user->administrator; echo 'INSERT CODE HERE'; }
Un saludo
Buenas,
Por defecto el WordPress devuelve un array con los roles, asi que debes comprobar que en ese array esta el rol que quieres, usando por ejemplo:
in_array( 'administrator', $user->roles )
Un ejemplo de un function:
/** * Comprueba si el rol existe en el usuario actual * que esta logueado * * @param string $role Nombre del rol. * * @return bool */ function is_role_in_user( $role ) { /* Comprobamos si la var $role es un string */ if ( is_string( $role ) ) { /* Evitamos PHP error si la function no esta definida */ if ( function_exists( 'is_user_logged_in' ) ) { /* Comprobamos si el user esta logueado */ if ( is_user_logged_in() ) { /* Recibimos la info del actual user */ $user = wp_get_current_user(); /* Comprobamos si existe el array roles */ if ( ! empty( $user->roles ) ) { /* Comprobamos si la var $role esta en el array en modo stricto, WPCS: OK */ return in_array( $role, $user->roles, true ); } } } } return false; }
Hola.
Mira, vamos a dejarlo aquí. Estoy intentando adaptarlo, pero no soy capaz.
Muchas gracias.
Un saludo.
Como quieres pero no es complicado.
Si pones tu codigo te puedo ayudar…
Solo dime donde llamas a la function y poco masA ver, son dos funciones. Quiero que no me «conecte» GTM con WordPress si eres administrador o editor (porque con GTM meto el código de Analytics).
Y sería estas dos funciones:
// Añadir el código de Google Tag Manager en el <head> add_action( 'wp_head', 'db_google_tag_manager1' ); function db_google_tag_manager1() { ?> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','INSERTA AQUI EL IDENTIFICADOR DE TU CONTENEDOR');</script> <!-- End Google Tag Manager --> <?php } // Añadir el código de Google Tag Manager code justo debajo de la apertura de la etiqueta <body> add_action( 'wp_footer', 'db_google_tag_manager2' ); function db_google_tag_manager2() { ?> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=INSERTA AQUI EL IDENTIFICADOR DE TU CONTENEDOR" height="0" width="0" style="noDisplay"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <?php }
Gracias, y disculpa.
No pasa nada…
Este es el codigo con comentarios, los puedes eliminarlos pero no pasarias el WPCS si eliminas los comentarios de las functionsTienes que añadirlo al archivo functions.php de tu theme
Ya diras…
/** * Comprueba si el rol existe en el usuario actual que esta logueado * * @param string|array $role Nombre(s) del rol. * * @return bool */ function is_role_in_user( $role ) { /* Comprobamos si la var $role es un string */ if ( is_string( $role ) ) { /* Evitamos PHP error si la function no esta definida */ if ( function_exists( 'is_user_logged_in' ) ) { /* Comprobamos si el user esta logueado */ if ( is_user_logged_in() ) { /* Recibimos la info del actual user */ $user = wp_get_current_user(); /* Comprobamos si existe el array roles */ if ( ! empty( $user->roles ) ) { /* Comprobamos si la var $role esta en el array en modo stricto, WPCS: OK */ return in_array( $role, $user->roles, true ); } } } } elseif ( is_array( $role ) ) { /* Comprobamos si la var $role es un array */ foreach ( $role as $r ) { /* Si el rol existes devolvemos verdadero y no comprobamos los otros roles */ if ( is_role_in_user( $r ) ) { return true; } } } return false; } /** * Añadir el codigo de GTM en el head * * @return void */ function db_google_tag_manager_heads() { ?> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','INSERTA AQUI EL IDENTIFICADOR DE TU CONTENEDOR');</script> <!-- End Google Tag Manager --> <?php } /** * Añadir el codigo GTM en el footer (body) * * @return void */ function db_google_tag_manager_footer() { ?> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=INSERTA AQUI EL IDENTIFICADOR DE TU CONTENEDOR" height="0" width="0" style="noDisplay"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <?php } /** * Comprobar roles y registrar acciones para añadir los codigos GTM * * @return void */ function db_google_tag_manager_init() { /* Por prevencion comprobamos si es estamos en alguna pagina de la administracion */ if ( ! is_admin() ) { /* Roles a comprobar */ $roles = array( 'administrator', 'editor' ); /** * Si el rol no existe registramos las acciones * de lo contrario las eliminamos por si estan registradas */ if ( ! is_role_in_user( $roles ) ) { add_action( 'wp_head', 'db_google_tag_manager_heads', 10 ); add_action( 'wp_footer', 'db_google_tag_manager_footer', 10 ); } else { remove_action( 'wp_head', 'db_google_tag_manager_heads', 10 ); remove_action( 'wp_footer', 'db_google_tag_manager_footer', 10 ); } } } add_action( 'init', 'db_google_tag_manager_init', 10 );
- Esta respuesta fue modificada hace 5 años, 6 meses por kallookoo.
Muchas gracias, de verdad. Es lo que necesitaba. Un saludo.
- El debate ‘Conditional tag para cuando el admin no está conectado’ está cerrado a nuevas respuestas.