¿Cómo puedo mostrar posts fijados primero en wp_query?

3 may 2013, 12:37:19
Vistas: 14.4K
Votos: -4

He estado buscando por mucho tiempo pero no pude encontrar una solución. No soy programador. Por favor ayúdenme. Aquí está mi código wp_query;

$my_query = new WP_Query('category_name=animals&showposts=10');
while ($my_query->have_posts()) : 
    $my_query->the_post();
    $do_not_duplicate = $post->ID; ?> 
    <li><a href="<?php the_permalink()?>"><?php the_title(); ?></a></li><?php 
endwhile; ?> 
0
Todas las respuestas a la pregunta 2
0

No está del todo claro lo que intentas hacer, pero las entradas fijas (sticky posts) deberían aparecer en la parte superior (es decir, ser las primeras entradas mostradas) a menos que hayas hecho algo para evitarlo. Ese es el comportamiento por defecto. Acabo de probarlo con tu consulta, cambiando solo el ID de categoría por uno que existe en mi servidor.

Para evitar este reordenamiento de entradas fijas (es decir, causar el comportamiento opuesto), puedes pasar un parámetro a WP_Query como:

$my_query = new WP_Query('category_name=animales&showposts=10&ignore_sticky_posts=true');

O establecer el valor antes de que se ejecute la consulta con:

$my_query->set('ignore_sticky_posts',true); // $my_query podría ser cualquier variable WP_Query instanciada.

Quizás deberías buscar en tu tema y plugins la cadena ignore_sticky_posts para ver si algo está interfiriendo con la consulta.

También podrías intentar forzar el reordenamiento de entradas fijas con:

function forzar_sticky_wpse_98187($qry) {
  $qry->set('ignore_sticky_posts',false);
}
add_action('pre_get_posts','forzar_sticky_wpse_98187',1000);

Esto añade un filtro con una prioridad arbitrariamente alta para que se ejecute como la última acción en ese hook. No sé si funciona. No ha sido probado. Además (si funciona) cambiaría todas las consultas, lo cual probablemente sea demasiado agresivo. Deberías añadir condiciones adicionales para restringir cuándo se ejecuta.

3 may 2013 16:47:59
4
// Obtener el ID de la categoría 'animals'
$category = get_cat_ID('animals');

// La Consulta
$args = array(
    'post__in' => get_option('sticky_posts'), // Obtener posts sticky
    'ignore_sticky_posts' => 1, // Ignorar el comportamiento sticky normal
    'order' => 'ASC', // Orden ascendente
    'cat' => $category // Filtrar por categoría
);
query_posts($args);

// El Loop
while (have_posts()) : the_post();
?>
    <div id="sticky_title"><h1><?php the_title(); ?></h1></div>
    <div id="sticky_excerpt"><p><?php the_excerpt(); ?></p></div>
<?php
endwhile;

// Restablecer la consulta
wp_reset_query();
3 may 2013 13:02:32
Comentarios

gracias por la respuesta pero no lo entiendo.

İlkay Çay İlkay Çay
3 may 2013 13:10:46

qué estás obteniendo

Balas Balas
3 may 2013 13:32:28

intento este código y funciona pero no muy bien. cuando hago un post 'sticky' este código solo muestra los posts 'sticky'. así que quiero mostrar 10 posts de la categoría 'animal' pero que los posts sticky aparezcan primero

İlkay Çay İlkay Çay
3 may 2013 14:43:19

@AMBOS Por favor, utilicen el formato adecuado (editor WYSIWYG, enlace de "ayuda" para más información), mayúsculas y minúsculas correctamente. Este no es un chat y debe servir como referencia para lectores posteriores. Gracias.

kaiser kaiser
3 may 2013 16:24:07