En un artículo anterior vimos cómo excluir páginas de la búsqueda de WordPress, en este caso, siguiendo la misma lógica, veremos cómo excluir entradas en el loop de inicio de un sitio WordPress
Resultado Final

Generalidades
WordPress por defecto tiene la opción de mostrar en el inicio de tu sitio o una lista de las entradas recientes o una página estática. Lo puedes configurar desde Ajustes > Lectura, tal como se muestra en la siguiente imagen:

Sin embargo al mostrar las entradas recientes no es posible configurar qué entradas excluir. En este artículo veremos cómo realizar esto a través de código.
Excluir entradas específicas
Para excluir entradas específicas necesitas conocer antes el ID de las entradas, en el siguiente código hemos supuesto que quieres ocultar tres entradas, con los ID 1, 2 y 3
add_action( 'pre_get_posts', 'dcms_eliminar_entradas_home_page' );
function dcms_eliminar_entradas_home_page( $query ){
if( $query->is_main_query() && $query->is_home() ) {
$query->set( 'post__not_in', array( 1, 2, 3 ) );
}
}
En el código anterior:
- Usamos el hook pre_get_posts, este hook se ejecuta luego que el objeto query es creado pero antes de que la consulta sea ejecutada
- El hook hace referencia a la función dcms_eliminar_entradas_home_page la cual pasa como parámetro el objeto query
- Dentro de la función podemos modificar la consulta, sin embargo antes nos aseguramos de que sea la consulta principal del home
- Luego hacemos las modificaciones usando los argumentos de la clase WP Query
Excluir categorías específicas
En base al código anterior podemos hacer modificaciones usando los argumentos de la clase WP Query, en el caso de que quieras excluir todas las entradas de una categoría específica el código sería como se muestra a continuación.
add_action( 'pre_get_posts', 'dcms_eliminar_entradas_home_page' );
function dcms_eliminar_entradas_home_page( $query ){
if( $query->is_main_query() && $query->is_home() ) {
$query->set('category__not_in',array(1));
}
}
Este código es similar al código inicial, sin embargo ahora consideramos category__not_in
Conclusión
Como has podido ver, tienes la flexibilidad de excluir entradas individuales, o todas las entradas de una categoría específica en la página de inicio de tu sitio WordPress a través de código y evitar el uso de plugins adicionales para realizar esto.
¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores.
Buen Artículo!!
Lo ensayé y funcionó perfecto.
Si el post que deseo ocultar está en un CPT creado con nombre “X” no en entradas como qué debo cambiar en el código anterior para que funcione igual.
Muchas gracias!!
Hola, revisa la documentación de la clase WP_Query
https://developer.wordpress.org/reference/classes/wp_query/
Busca “Display multiple post types, including custom post types”, verás que puedes pasar como argumento los tipos de datos que quieres.
Probé excluir un post y no pasa nada. Con categoría si funciona.
Hola, asegúrate que el ID del post que esta en los parámetros del $query sea el correcto.