WordPress muestra publicaciones privadas a los usuarios registrados. ¿Cómo desactivar esta función?

3 minutos de lectura

En una nueva instalación de WordPress 2.8, tengo algunas publicaciones asignadas a la categoría Foo que anteriormente eran públicas pero que desde entonces se han hecho privadas. Cuando inicio sesión en WordPress (como administrador) y también estoy navegando por la página de categoría Foo en una pestaña diferente en el mismo navegador, puedo ver las publicaciones privadas en la página de categoría, con los títulos de entrada precedidos por la palabra ” PRIVADO: “.

Ahora, nada está “roto” en esto: las publicaciones están correctamente ocultas para los usuarios que no han iniciado sesión. Pero no quiero que los usuarios registrados vean las publicaciones privadas en el sitio en vivo porque, francamente, es molesto, no útil.

¿Qué debo hacer con WP Loop en la página de archivo de categoría o con el archivo de funciones para desactivar esta capacidad no deseada de ver publicaciones privadas en el sitio?

  • ¿Es porque su usuario administrador tiene un poco más de permisos que los usuarios normales? ¿Ha intentado crear un usuario estándar de “Suscriptor” y ver si tiene el mismo problema?

    – Amadiere

    16 de junio de 2009 a las 7:10

  • Solo hay dos usuarios en el sistema, ambos administradores. No quiero ver publicaciones privadas en este blog (en la parte delantera, quiero decir, ya sabes, navegando por el sitio como un usuario) mientras estoy conectado. Por lo tanto, crear un usuario “suscriptor” no ayudaría en este asunto. todavía es necesario iniciar sesión como administrador para realizar el mantenimiento del sitio de back-end y demás.

    – Asparagirl

    16 de junio de 2009 a las 9:35

La forma de piratear para hacer lo que quiere es poner esta línea de código en la parte superior de su bucle (después de la el cargo() parte:

if( get_post_status()=='private' ) continue;

Esta es la forma de piratear porque su WordPress todavía está cargando esa publicación de la base de datos y la tiene en cuenta para contar publicaciones, etc., pero la omite cuando la muestra. Si buscaba una frase que solo estaba en publicaciones privadas, obtendría una página en blanco sin ningún error, por ejemplo.

La forma correcta de hacer esto es agregar un filtro que modifique el SQL utilizado para generar la lista de publicaciones. La parte complicada es no filtrarlo si estás en la sección de administración, de lo contrario, nunca volverás a ver tus publicaciones privadas. El mejor lugar para este filtro es el archivo functions.php de tu tema. Esto es lo que debe poner allí:

add_filter('posts_where', 'no_privates');
function no_privates($where) {
    if( is_admin() ) return $where;

    global $wpdb;
    return " $where AND {$wpdb->posts}.post_status != 'private' ";
}

  • Encontré el mismo problema para mi wordpress. Su solución parece aplicable. ¿Puedes decir en qué consiste el archivo php? y, donde debería add_filter(‘posts_where’, ‘no_privates’); ¿ser agregado?

    – Elaine

    29 de enero de 2011 a las 19:01

  • ¡Gracias por la respuesta! Resolvió mi problema y no pude encontrar esto en ningún otro lugar en la web.

    –Daniel Newman

    16/04/2013 a las 22:20

  • +Elaine El archivo php es functions.php y se encuentra en el directorio de su tema. Puede agregar este código prácticamente en cualquier lugar de functions.php, como directamente después de

    –Eric Klien

    1 de junio de 2016 a las 6:45

  • Este código es realmente agradable. Cambié is_admin() a is_admin() || is_single() para que pueda obtener una vista previa de las publicaciones privadas.

    –Eric Klien

    1 de junio de 2016 a las 7:06

¿Por qué no simplemente agregar 'post_status' => 'publish' hacia WP_Query argumentos?

$the_query = new WP_Query( array(
    'post_type' => 'post' ,
    'orderby' => 'date' ,
    'order' => 'DESC' ,
    'post_status' => 'publish',
    'posts_per_page' => 6,
) );

Entonces, si nadie puede ver estas publicaciones privadas, incluidos los administradores, ¿por qué no establecer su estado como no publicado o borrador?

  • Una de las razones es que tienes un montón de usuarios y están configurando las publicaciones como privadas, aunque, como dijiste, no publicado o borrador sería una mejor solución.

    –Eric Klien

    1 de junio de 2016 a las 7:09

Esta no es una solución directa a la pregunta exacta, pero una forma de ocultar esas publicaciones es asignarlas a una categoría especial y luego ocultar esa categoría para que no se muestre en el bucle. Para excluir publicaciones de una categoría determinada de la visualización, dentro del ciclo (inmediatamente después de la instrucción while()) use esta línea de código:

<?php if (in_category('3')) continue; ?>

En este ejemplo, 3 es el ID de categoría de la categoría a excluir, y el código simplemente le dice a WordPress que continúe con la siguiente publicación sin mostrar esta.

¿Ha sido útil esta solución?