web-dev-qa-db-fra.com

pourquoi ignore_sticky_posts dans les requêtes post-it

Nous savons tous que ignore_sticky_posts est utilisé pour exclure les posts collants de votre requête personnalisée.

Mais pourquoi sur la page de codex https://codex.wordpress.org/Sticky_Posts , ils utilisent ignore_sticky_posts pour interroger les publications persistantes ??

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

Ceci est tellement déroutant et n'a pas de sens, vous le voulez et pourtant vous l'excluez?

7
吉 宁

Nous savons tous que ignore_sticky_posts est utilisé pour exclure les post-it de votre requête personnalisée.

- Non, cette hypothèse est fausse.


Qu'est-ce que ignore_sticky_posts signifie:

Même si en anglais naturel, ignore_sticky_posts ressemble à WordPress devrait ignorer tous les posts collants de la requête, ce n’est en réalité pas ce que WordPress fait. Au lieu de cela, vous devriez lire l'argument 'ignore_sticky_posts' => 1 comme suit:

Lorsque ignore_sticky_posts est défini sur true ou 1, WordPress ignorera la procédure pour définir les posts persistants dans votre requête personnalisée.


Que fait WordPress lorsque ignore_sticky_posts n'est pas défini:

Pour bien comprendre ce que fait 'ignore_sticky_posts' => 1, vous devez comprendre ce que WordPress fait lorsque l’argument ignore_sticky_posts n’est pas défini ou défini sur false ou 0 (par défaut):

  1. S'il existe des publications dans le résultat de la requête qui font partie des publications du bâton, WordPress les placera en haut du résultat de la requête.

  2. Si aucune publication rémanente n'est présente dans le résultat de la requête, WordPress récupérera à nouveau toutes ces publications rémanentes de la base de données et les placera en haut du résultat de la requête.

Donc, lorsque l'argument est défini comme 'ignore_sticky_posts' => 1, WordPress simplement ignore la procédure ci-dessus , c'est tout. Cela ne les exclut pas spécifiquement. Pour cela, vous devez définir l'argument post__not_in.


Explication de l'exemple de codex:

Venons maintenant à l'exemple du codex:

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

Ici, le codex ne met que 'ignore_sticky_posts' => 1 pour être efficace, rien de plus . Même sans l'avoir, vous obtiendrez le même résultat attendu:

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

Cependant, dans ce cas, puisque l’argument 'ignore_sticky_posts' => 1 n’est pas défini, WordPress effectuera inutilement toutes les procédures consistant à définir des posts collants en haut des résultats, même si tous ces résultats (issus de cet exemple) ne sont que des posts collants.


Le meilleur moyen d'apprendre quelque chose dans WordPress est d'examiner le code de base. Donc, pour une compréhension encore plus claire, examinez cette partie de WordPress CODE .

13
Fayaz