Si tienes entradas protegidas por contraseña pero quieres ocultarlas a los usuarios de la página principal del sitio, en la del Blog, en los widgets del sidebar y los archivos de WordPress puedes usar el siguiente código:
<div style="text-align: center; margin: 20px 0;">
<a href="https://ariapsa.com/mb" target="_blank">
<img src="https://ariapsa.com/wp-content/uploads/2024/08/Marca-blanca-Diseno-de-paginas-web-mexico-ariapsa.jpg" alt="Banner" style="max-width: 100%; height: auto;">
</a>
</div>
// Función para ocultar posts protegidos por contraseña en los listados específicos
function exclude_protected($where) {
global $wpdb;
return $where .= " AND {$wpdb->posts}.post_password = '' ";
}
// Función para añadir el filtro a las consultas principales
function exclude_protected_action($query) {
// Verificar que no estamos en la administración y la consulta es principal
if (!is_admin() && $query->is_main_query()) {
// Excluir en archivos, categorías, etiquetas, página de entradas, página estática y sección de blog
if (is_archive() || is_category() || is_tag() || is_home() || is_front_page() || is_page()) {
add_filter('posts_where', 'exclude_protected');
}
// No excluir en búsquedas
// Permitir acceso directo mediante URL
// Los posts y páginas protegidos por contraseña serán accesibles directamente mediante URL
}
}
// Acción para añadir el filtro en el momento adecuado
add_action('pre_get_posts', 'exclude_protected_action');
Para que tus usuarios encuentren el contenido será necesario enviar el link de la pagina o entrada.
×
Ocultar post (entradas) protegidas excepto en determinadas categorías
¿Necesitas que en determinadas categorías se muestre las entradas protegidas por contraseña?
Explicación del código:
- Función
exclude_protected
: Añade una condición a la consulta SQL para excluir los posts que tienen una contraseña establecida (post_password
no está vacío). - Función
exclude_protected_action
: Verifica que no se está ejecutando en el área de administración y que la consulta es la principal (is_main_query()
).- Excluye los posts protegidos por contraseña en archivos (
is_archive()
), categorías (is_category()
), etiquetas (is_tag()
), la página de inicio (is_home()
), una página estática (is_front_page()
), páginas individuales (is_page()
) y entradas individuales (is_single()
). - No excluye los posts protegidos en las búsquedas (
is_search()
). - Permite que los posts y páginas protegidos sean accesibles directamente mediante la URL.
- Excluye los posts protegidos por contraseña en archivos (
- Acción
pre_get_posts
: Asegura que el filtro se aplica en el momento adecuado, antes de que WordPress obtenga los posts.