Warum ignorieren_sticky_posts in der Sticky-Post-Abfrage

9

Wir alle wissen, dass ignore_sticky_posts verwendet wird, um Sticky Post von Ihrer benutzerdefinierten Abfrage auszuschließen.

Aber warum verwenden sie auf der Codex-Seite https://codex.wordpress.org/Sticky_Posts ignore_sticky_posts, um klebrige Posts abzufragen?

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

Das ist so verwirrend und macht keinen Sinn, du willst es und doch schließt du es aus?

吉 宁
quelle

Antworten:

18

Wir alle wissen, dass dies ignore_sticky_postsverwendet wird, um klebrige Posts von Ihrer benutzerdefinierten Abfrage auszuschließen.

- Nein, diese Annahme ist falsch.


Was ignore_sticky_postsbedeutet:

Auch wenn in natürlichem Englisch so ignore_sticky_postsklingt, als ob WordPress alle klebrigen Beiträge aus der Abfrage ignorieren sollte, ist dies in Wirklichkeit nicht das, was WordPress tut. Stattdessen sollten Sie das 'ignore_sticky_posts' => 1Argument wie folgt lesen :

Wenn ignore_sticky_postsauf trueoder gesetzt ist 1, ignoriert WordPress das Verfahren zum Festlegen der Sticky Posts in Ihrer benutzerdefinierten Abfrage.


Was WordPress macht, wenn ignore_sticky_postsnicht festgelegt ist:

Um klar zu verstehen, was 'ignore_sticky_posts' => 1funktioniert, müssen Sie verstehen, was WordPress tut, wenn das ignore_sticky_postsArgument nicht oder auf gesetzt istfalse oder 0(standardmäßig) gesetzt ist:

  1. Wenn das Abfrageergebnis Beiträge enthält, die Teil von Stick-Beiträgen sind, werden diese von WordPress an die Spitze des Abfrageergebnisses verschoben.

  2. Wenn im Abfrageergebnis kein klebriger Beitrag vorhanden ist, ruft WordPress alle diese klebrigen Beiträge erneut aus der Datenbank ab und setzt sie an die Spitze des Abfrageergebnisses.

Wenn das Argument auf gesetzt ist 'ignore_sticky_posts' => 1, ignoriert WordPress einfach das obige Verfahren , das ist alles. Es schließt sie nicht speziell aus. Dafür müssen Sie einstellenpost__not_in Argument setzen.


Erläuterung des Codex-Beispiels:

Kommen wir nun zum Beispiel aus dem Kodex:

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

Hier setzt Codex nur 'ignore_sticky_posts' => 1 auf Effizienz, nichts weiter . Auch ohne es zu haben, erhalten Sie das gleiche erwartete Ergebnis:

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

In diesem Fall führt 'ignore_sticky_posts' => 1WordPress jedoch , da kein Argument festgelegt ist, unnötigerweise alle Vorgänge aus, bei denen klebrige Beiträge an die Spitze der Ergebnisse gesetzt werden, obwohl alle diese Ergebnisse (aus diesem Beispiel) nur klebrige Beiträge sind.


Der beste Weg, etwas in WordPress zu lernen, besteht darin, den Kerncode zu untersuchen. Untersuchen Sie diesen Teil von WordPress CODE , um ein noch klareres Verständnis zu erhalten .

Fayaz
quelle
3
WordPress sollte Ihre Antwort auf ihrer klebrigen Post-Seite enthalten!
1
Ich bin froh, dass es dir geholfen hat. WordPress-Codex kann bearbeitet werden, auch Sie können ihn bearbeiten und diese Antwort als Referenz für andere hinzufügen;)
Fayaz
4
Diese Antwort wird sehr unterschätzt. Ich bin jetzt tatsächlich zweimal darauf zurückgekommen, im Abstand von einem Jahr. So verwirrend ist dieser Parameter.
Benji