Consulta de WordPress para mostrar solo publicaciones fijas

2 minutos de lectura

La siguiente es mi consulta de wordpress en la que quiero mostrar solo publicaciones fijas, pero la consulta no muestra ninguna publicación. ¡También configuré dos publicaciones como pegajosas para que se verifique esa parte! Por favor, hágame saber cómo modificar esta consulta para que solo muestre las publicaciones que son pegajosas.

<?php 
   $wp_query = null; 
  $wp_query =  new WP_Query(array(
 'posts_per_page' => 2,
 //'paged' => get_query_var('paged'),
 'post_type' => 'post',
'post__in'  =>  'sticky_posts',
 //'post__not_in' => array($lastpost),
 'post_status' => 'publish',
 'caller_get_posts'=> 0 ));

  while ($wp_query->have_posts()) : $wp_query->the_post(); $lastpost[] = get_the_ID();
?>

Consulta que mostrará solo publicaciones fijas:

// get sticky posts from DB
$sticky = get_option('sticky_posts');
// check if there are any
if (!empty($sticky)) {
    // optional: sort the newest IDs first
    rsort($sticky);
    // override the query
    $args = array(
        'post__in' => $sticky
    );
    query_posts($args);
    // the loop
    while (have_posts()) {
         the_post();
         // your code
    }
}

  • Oye, me enfrento a un último problema que cuando no hay publicaciones adhesivas, recibo una advertencia: – / ¿Por favor, hágame saber cómo solucionar esa parte también?

    – usuario2304394

    6 de noviembre de 2013 a las 14:19

  • No debería recibir ninguna advertencia si utiliza !empty como mostré. Pero puedes intentar extender esto if para comprobar también si is_array($sticky)

    – sebápalo

    6 de noviembre de 2013 a las 14:21

  • Sé que esto es antiguo, pero para cualquiera que lo encuentre, no use query_posts. Nunca fue diseñado para usarse en complementos o temas. Ver documentos de WordPress

    – wickywills

    8 de julio de 2021 a las 14:43

La función query_posts() crea un nuevo WP_Query() no antes de que se configure la consulta actual, lo que significa que este no es el método más eficiente y realizar solicitudes SQL adicionales.

Use el gancho ‘pre_get_posts’ para estar seguro, como

function sticky_home( $query ) {

    $sticky = get_option('sticky_posts');

    if (! empty($sticky)) {
        if ( $query->is_home() && $query->is_main_query() ) {
             $query->set( 'post__in', $sticky );
        }
    }

} add_action( 'pre_get_posts', 'sticky_home' );

¿Ha sido útil esta solución?