En este artículo veremos cómo restringir parte del contenido de tus artículos, sin usar plugins, para que sólo puedan verlo determinados usuarios o grupos de usuarios.
1- Generalidades
Usaremos la funcionalidad de shortcodes en WordPress, podemos colocar el código directamente como parte de los archivos del theme, en functions.php, sin embargo es mejor centralizar nuestro código a través de un plugin de Snippets.
2- Contenido restringido para usuarios registrados
Para restringir parte del contenido de entradas y que sólo sea accesible para usuarios registrados, puedes usar el siguiente código:
add_shortcode('REGISTRADO','mostrar_contenido_usuario_registrado');
function mostrar_contenido_usuario_registrado($atts, $content = null){
global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request));
if ( ! is_user_logged_in() ){
return '<div>Regístrate para ver el contenido...<a href="'.wp_login_url($current_url).'" >Ir al Registro</a></div>';
}
return $content;
}
3- Contenido restringido para usuarios visitantes
En el caso que quieras mostrar sólo parte del contenido para usuarios visitantes, puedes usar el siguiente código:
add_shortcode('VISITANTE','mostrar_contenido_usuario_visitante');
function mostrar_contenido_usuario_visitante($atts, $content = null){
if ( ! is_user_logged_in() ){
return $content;
}
return '';
}
4- Contenido restringido para roles de usuarios
La lógica es la misma que las anteriores, en el caso de usuarios para un determinado rol puedes usar la funciones de WordPress para comprobar qué rol tiene un determinado usuario, tal como se muestra a continuación:
add_shortcode('AUTOR','mostrar_contenido_usuario_autor');
function mostrar_contenido_usuario_autor($atts, $content = null){
$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ){
return $content;
}
return 'El usuario debe ser autor...';
}
5- Uso de los shortcodes
Finalmente, luego que tengas alguno de los códigos anteriores agregados en tu sitio, entonces puedes usar los Shortcode como parte del contenido de tus entradas tal como se muestra a continuación.
[REGISTRADO]
Contenido para usuario registrado
....
[/REGISTRADO]
[VISITANTE]
Contenido para usuario visitante
....
[/VISITANTE]
[AUTOR]
Contenido para usuarios del grupo autores
....
[/AUTOR]
¿Aún con dudas?, en el siguiente video se detalla cada uno de los puntos anteriores.
Gracias por este magnífico post, pero tengo un pequeño problema, después de logearme no me redirige a la página donde esta el shortcode.(se queda en el panel de administración) me gustaria que me devolviera a la página o post.
He hecho algo mal ?
Hay que añadir algo más de código?
Hola José, gracias por el comentario, efectivamente había que hacer una mejora, ya la he implementado en el código del punto 2, la función wp_login_url() acepta un parámetro opcional que es la url de redirección.
Saludos.
Gracias, eres un crack
!Magnificó artículo Jhon¡
Estoy intentando insertar 2 roles con el código (4- Contenido restringido para roles de usuarios
) pero no me es posible, me da error el array, algo hago mal. ¿Como podría decir que el contenido sea visible para 2 roles?
Hola, supongo que has puesto el primer parámetro com array, prueba hacerlo con un or, es decir por ejemplo:
Muchísimas gracias Jhon, a funcionado perfectamente!!
Enhorabuena por esos fantásticos tutoriales 🙂
hola buen día.
me gustaria hacer un area de miembros donde se tengan que registrar al sitio web y a la hora de registrarse solo vea ese contenido mi problema es que son varios usuarios. como puede hacer que el usuario este registrado no vea la otra información. y este oculto de los demas usuarios registrados.
Hola, tienes que trabajarlo a nivel de roles, si es necesario crear varios roles, los roles son grupos de usuarios, los permisos le das a los roles no a usuarios individuales, si te complicas hacerlo por código, existen plugins de restricción de contenido a nivel de rol, revisa por ejemplo : https://es.wordpress.org/plugins/restrict-content-by-role/
buenas noches, yo estoy intentando hacer una web donde tengas que logearte para ver el resto de las paginas, pero no lo he logrado ni con plugins, ni poniendo el resto de las paginas en privado y asignaando roles, me podrias ayudar porfa?
Hola has probado con este plugin? : https://es.wordpress.org/plugins/wp-members/
Hola. He puesto el código para mostrar contenido por roles de usuario y funciona correctamente. Pero ahora quiero hacer otro shortcode que haga lo mismo con el mismo rol de usuario pero sin mostrar mensaje alguno a los usuarios que no son de dicho rol, lo intenté con el mismo código cambiando el shortcode pero dejando la parte del rol de usuario igual y eliminando la parte de ” return ‘El usuario debe ser autor…’; ” guardo los cambios y sale sin errores pero al activar de nuevo el plugin de funciones sale “el plugin no se ha activado porque ha provocado un error fatal” ¿Alguna idea para solucionarlo?
Hola, por lo que comentas lo has realizado bien, prueba retornando un mensaje vacío y verifica, por ejemplo: return;
Hola Jhon, que tal?
Estoy utilizando 2 fragmentos de código de más abajo para restringir contenido para dos roles “Clientes” y “Profesionales” en varias página y funciona perfectamente, aunque ahora tengo la situación que necesito restringir contenido pero para dos roles a la vez, es decir, tienen que poder ver la misma información “clientes” y “profesionales” a la vez.
El shortcode que utilizo es este: [cliente, profesionales_salud] pero no funciona con el conjunto de dos roles a la vez (por separado; ejemplo ==> [cliente] si que funciona) . ¿Cómo podría implementarlo?
Gracias por el magnífico tutorial 😉
Un saludo
Hola, prueba poniendo: [cliente] [profesionales_salud]
Hola Jhon,
Sí, eso ya lo probé, pero no funciona. Muestra el que esta mas cercano al cierre del contenido, en este caso [profesionales_salud].
La idea seria algo así [cliente, profesionales_salud] contenido [/cliente, profesionales_salud], pero esto no funciona. Alguna idea?
Gracias por tu ayuda Jhon.
para quienes no les funcione, tienen que purgar el caché antes de probarlo, usen un plugin quese llama W3 Total Caché y en la opción purge all caché, y listo, porque si no están bajando la versión anterior a sus modificaciones.
Saludo!
Gracias por el aporte.
Hola, y que pasa si tengo un login externo al de wordpress que ha sido programado. Tengo una sección de cupones y estos son los que quiero restringir a los visitantes que no se encuentran en nuestra base de datos. Tendré que incluir la variable de session programada en el login? Te agradecería mucho tu respuesta!
Hola, lo que comentas es algo muy particular y posiblemente se requiera hacer a través de código personalizado. Saludos.
Magnifico artículo pero me queda una duda, si ya estás registrado en un rol como puede registrarse el usuario en otro rol, o en dos roles a la vez?
gracias de antemano
Hola, podrías revisar el siguiente enlace en donde hay una opción a través de un plugin o a través de código: https://stackoverflow.com/questions/27420705/how-to-assign-multiple-roles-for-a-user-in-wordpress
Hola, estoy intentando hacer content dripping con shortcodes pero no se donde debo poner los codigos o si me podrias indicar si es fundamental el comprar una extension de plugin que lo haga
Hola, si ya tienes los shortcodes hechos, deberían funcionar sin problemas como parte de tu contenido, puedes usar un bloque de tipo shortcode en el editor Gutenberg.