Ajustes para esconder sin plugins información publicada
Cómo ocultar páginas y entradas en el area de administración de WordPress
Siguiendo con los artículos dedicados a ocultar o restringir el acceso a determinadas secciones en WordPress, a continuación vamos a ver cómo hacer desaparecer (sin eliminar) una o más páginas y/o entradas del area de administración del sistema.
Las razones para esconder información en el panel de control pueden ser varias: prevenir que nuestro cliente cambie algo que no debería cambiar, evitar que se confunda con las páginas que solo están ahí para incluir plantillas personalizadas, páginas innecesarias creadas por algún plugin, por simplificar, por seguridad, para proteger de errores involuntarios…
Así que, convencidos de que no estamos haciendo nada malo, vamos a ver cómo podemos ocultar las páginas que nos convengan añadiendo una función nueva a través de pre_get_posts, un hook que nos permite alterar la consulta original añadiendo y ejecutando funciones antes de que la consulta se lleve a cabo, y sin tener que editar los archivos internos del sistema.
Los siguientes fragmentos de código pueden incluirse en el archivo «functions.php» del tema activo o bien en un plugin de funciones.
Si te sirve de ayuda, desde esta página puedes descargar un plugin de funciones vacío, a punto para activar y utilizar, y aprender más cosas sobre el archivo ‘functions.php’.
Código para ocultar páginas en el backend del sistema
// Ocultamos algunas páginas de la lista en el editor function mytheme_hide_pages( $query ) { // Si no estamos en el area de administración, // salimos sin hacer nada. if ( !is_admin() ) return $query; // Accedemos a la variable global "$pagenow" global $pagenow; // Si la página actual es el listado de páginas // La URL es "edit.php?post_type=page" if ( 'edit.php' == $pagenow && ( get_query_var('post_type') && 'page' == get_query_var('post_type') ) ) // Añadimos el parámetro "post__not_in" a la consulta // y ocultamos la lista de páginas especificadas (IDs) en el array $query->set( 'post__not_in', array(250,251) ); // Continuamos con la consulta return $query; } add_action( 'pre_get_posts' ,'mytheme_hide_pages' );
Código para ocultar entradas de la lista
// Ocultamos algunas entradas de la lista en el editor function mytheme_hide_posts( $query ) { // Si no estamos en el area de administración, // salimos sin hacer nada. if ( !is_admin() ) return $query; // Accedemos a la variable global "$pagenow" global $pagenow; // Si la página actual es el listado de entradas // La URL es "edit.php" if ( 'edit.php' == $pagenow ) // Añadimos el parámetro "post__not_in" a la consulta // y ocultamos la lista de entradas especificadas (IDs) en el array $query->set( 'post__not_in', array(501,548,620,1152) ); // Continuamos con la consulta return $query; } add_action( 'pre_get_posts' ,'mytheme_hide_posts' );
En ambos casos, es imprescindible cambiar (en la linea 18) la lista de IDs de las páginas y entradas que queramos ocultar.
Conviene aclarar que con esto no estamos eliminando nada, ni siquiera impidiendo que se editen. Lo único que hemos hecho es ocultarlas (esconderlas de la vista, hacerlas invisibles) en el backend o area de administración. Otros usuarios editores o administradores del sitio web podrán acceder a través del enlace «Editar» (si está definido en la plantilla) o bien, si conocen el número de identificación, podrán acceder sin problema a través de esta URL, tanto para páginas como para entradas (ID = 0000):
http://www.ejemplo.com/wp-admin/post.php?post=0000&action=edit
Por tanto, esto no tiene ningún efecto en la parte de la web abierta a todo el mundo. Las páginas y entradas seguirán siendo accesibles y apareciendo normalmente para nuestras visitas, a no ser que estén protegidas por contraseña y ocultas para determinados usuarios.
Aquí encontrarás información sobre cómo proteger entradas y páginas con contraseña en WordPress o bien cómo mostrar contenido según el usuario que está conectado.
Cómo averiguo el ID de cada página o entrada
Para saber cuál es el número identificador (ID) que WordPress da a nuestros contenidos solo tenemos que situar el cursor encima del título y fijarnos en la dirección que aparece abajo del todo en nuestro navegador. Por ejemplo:
http://www.ejemplo.com/wp-admin/post.php?post=5622&action=edit
En este caso, el ID de la entrada será «5622». Este es el número que habrá que añadir en el código anterior.
Añadir una columna «ID» en el editor
Opcionalmente, si necesitamos hacer un uso más frecuente de este identificador, otra opción podría ser añadir una columna nueva que muestre este número en las tablas de administración de WordPress.
Para ello tendremos que agregar este fragmento de código:
// Añadimos una columna "ID" en el editor de páginas y en el de entradas function mytheme_id_column($defaults){ $defaults['wps_post_id'] = __('ID'); return $defaults; } function mytheme_custom_id_column($column_name, $id){ if ( $column_name === 'wps_post_id' ) { echo $id; } } // Editor de entradas (posts) add_filter( 'manage_posts_columns', 'mytheme_id_column', 5 ); add_action( 'manage_posts_custom_column', 'mytheme_custom_id_column', 5, 2 ); // Editor de páginas (pages) add_filter( 'manage_pages_columns', 'mytheme_id_column', 5 ); add_action( 'manage_pages_custom_column', 'mytheme_custom_id_column', 5, 2 ); // Evitamos que la nueva columna ID ocupe demasiado espacio // incluyendo una linea de CSS en la cabecera (ancho = 80px) function mytheme_admin_style_id_column() { echo '<style type="text/css"> .column-wps_post_id { width: 80px !important; } </style>'; } add_action('admin_head', 'mytheme_admin_style_id_column');
Lo más probable es que por defecto, la nueva columna «ID» sea demasiado ancha, así que hemos añadido una linea de CSS en la cabecera que se encargará de este pequeño problema, haciendo que la nueva columna ocupe solo 80px.
Conclusión
El sistema de gestión de usuarios y privilegios de WordPress es enormemente flexible para conseguir casi cualquier cosa que nos propongamos, pero cuando los ajustes que queremos hacer son menores y tan específicos como ocultar una sola página de la lista, viene bien poder configurar el sistema sin tocar los archivos del núcleo y sin tener que depender de ningún plugin.
Permalink
Yo implementé una variante de esta función, y es la siguiente:
Tan sólo tendríais que modificar el ID del usuario que será el único que podrá visualizar esa(s) página(s), y los ID’s de las páginas a ocultar para el resto de los usuarios.
Permalink
Hola amigos.
Como oculto un post de wordpress pero si puedo acceder via la url?
Permalink
Buena idea. Así podemos modificar lo que puede ver cada usuario.
Gracias por la aportación!
Permalink
De nada, Daniel. Gracias a ti por este blog tan bueno que llevas con publicaciones tan interesantes sobre WordPress.
Eso es lo bueno, increíble y maravilloso del mundo del software libre y código abierto… que cada uno aporta sus ideas, soluciones y diferentes puntos de vista a los problemas que surgen. :D
P.S.: no sabía que los comentarios aceptaban los tags «[ php ]» para incluir código, si no lo hubiese puesto. Así que gracias por incluirlo también. :P
Permalink
Vaya, ahora «la cagué» con ese comentario. Jaja. Y no puedo editarlo, así que puedes editarlo para que no quede como que puse una tontería random.
Permalink
No pasa nada. Ya está arreglado. He puesto espacios en la etiqueta PHP para que no la interprete como código. Gracias por preocuparte :-)
Permalink
Hola soy novato en WordPress y necesitaría una ayudita. Se que es un tema viejo pero no me funciona ninguno de los dos códigos ni el tuyo Daniel ni el de Kalede , necesito incluir algún otro archivo en el function.php ?
Desde ya muchas gracias