¿Por qué el argumento ignore_sticky_posts está en la consulta de entradas fijas?

22 mar 2017, 08:00:05
Vistas: 28.2K
Votos: 16

Todos sabemos que ignore_sticky_posts se usa para excluir entradas fijas de tu consulta personalizada.

Pero, ¿por qué en la documentación de desarrollo de temas de WordPress usan ignore_sticky_posts al consultar entradas fijas?

$args = array(
    'posts_per_page' => 1,
    'post__in'  => get_option( 'sticky_posts' ),
    'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );

¡Esto es muy confuso y no tiene sentido! ¿Las quieres y aun así las excluyes?

0
Todas las respuestas a la pregunta 2
4
37

Todos sabemos que ignore_sticky_posts se usa para excluir posts fijos (sticky) de tu consulta personalizada.

- No, esta suposición es incorrecta.


Qué significa realmente ignore_sticky_posts:

Aunque en inglés natural, ignore_sticky_posts suena como que WordPress debería ignorar todos los posts fijos en la consulta, en realidad eso no es lo que hace WordPress. En su lugar, debes interpretar el argumento 'ignore_sticky_posts' => 1 de la siguiente manera:

Cuando ignore_sticky_posts está configurado como true o 1, WordPress ignorará el procedimiento de establecer los posts fijos dentro de tu consulta personalizada.


Qué hace WordPress cuando ignore_sticky_posts no está configurado:

Para entender claramente qué hace 'ignore_sticky_posts' => 1, necesitas comprender qué hace WordPress cuando este argumento no está configurado o está establecido como false o 0 (por defecto):

  1. Si hay posts dentro de los resultados de la consulta que son parte de los posts fijos, WordPress los colocará al principio de los resultados.

  2. Si algún post fijo no está presente en los resultados de la consulta, WordPress los obtendrá nuevamente de la base de datos y los colocará al principio de los resultados.

Así que cuando el argumento se establece como 'ignore_sticky_posts' => 1, WordPress simplemente ignora el procedimiento anterior, eso es todo. No los excluye específicamente. Para eso necesitas usar el argumento post__not_in.


Explicación del ejemplo del codex:

Ahora, veamos el ejemplo del codex:

$args = array(
    'posts_per_page' => 1,
    'post__in'  => get_option( 'sticky_posts' ),
    'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );

Aquí el codex solo está configurando 'ignore_sticky_posts' => 1 por eficiencia, nada más. Incluso sin este parámetro, obtendrías el mismo resultado esperado:

$args = array(
    'posts_per_page' => 1,
    'post__in'  => get_option( 'sticky_posts' )
);
$query = new WP_Query( $args );

Sin embargo, en este caso, como no se establece 'ignore_sticky_posts' => 1, WordPress realizará innecesariamente todo el procedimiento de colocar los posts fijos al principio de los resultados, aunque todos estos resultados (de este ejemplo) son solo posts fijos.


La mejor manera de aprender algo en WordPress es examinar el CÓDIGO central. Para una comprensión aún más clara, examina esta parte del CÓDIGO de WordPress.

22 mar 2017 09:53:34
Comentarios

¡WordPress debería incluir tu respuesta en su página de publicaciones fijas!

吉 宁 吉 宁
22 mar 2017 10:20:56

Me alegra que te haya ayudado. El codex de WordPress es editable, incluso tú puedes editarlo y añadir esta respuesta como referencia para otros ;)

Fayaz Fayaz
22 mar 2017 11:23:28

Esta respuesta está muy infravalorada. De hecho, he vuelto a ella dos veces ahora, con un año de diferencia. Así de confuso es este parámetro.

Benji Benji
28 mar 2018 15:28:46

Excelente respuesta fayaz. Detallada y exhaustiva.

jdm2112 jdm2112
9 jun 2021 05:16:53
2

Aquí hay una alternativa que, en mi opinión, sería más fácil, aunque algunas de las ideas ya mencionadas son bastante buenas.

    $args=array(
        'post__not_in'=>get_option('sticky_posts')
        // añade aquí cualquier otro argumento que desees
    );
    $posts=new WP_Query($args);
19 jun 2020 17:25:36
Comentarios

Sin embargo, ten cuidado cuando hagas esto. Esta lista puede volverse muy larga, en teoría, lo que resultaría en una consulta que es muy pesada para la base de datos potencialmente. Lo que hace tu consulta no es la función real prevista para las entradas fijas, como se explica adecuadamente en esta respuesta: https://wordpress.stackexchange.com/a/260951/1763

Coen Jacobs Coen Jacobs
20 jun 2020 10:52:22

El objetivo es no incluir ninguna entrada fija en absoluto, no solo ignorar la forma en que funciona la idea de fijar, sino simplemente no mostrar ninguna.

user2026338 user2026338
22 jun 2020 17:04:25