De ce argumentul ignore_sticky_posts este folosit în interogarea articolelor fixate?

22 mar. 2017, 08:00:05
Vizualizări: 28.2K
Voturi: 16

Știm cu toții că ignore_sticky_posts este folosit pentru a exclude articolele fixate din interogarea personalizată.

Dar de ce în documentația de dezvoltare a temelor WordPress, aceștia folosesc ignore_sticky_posts în interogarea articolelor fixate?

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

Acest lucru este foarte confuz și nu are niciun sens! Le vrei și totuși le excluzi?

0
Toate răspunsurile la întrebare 2
4
37

Cu toții știm că ignore_sticky_posts este folosit pentru a exclude postările lipicioase (sticky) din interogarea personalizată.

- Nu, această presupunere este greșită.


Ce înseamnă de fapt ignore_sticky_posts:

Chiar dacă în engleză naturală, ignore_sticky_posts sună ca și cum WordPress ar trebui să ignore toate postările lipicioase din interogare, în realitate WordPress nu face asta. În schimb, ar trebui să citiți argumentul 'ignore_sticky_posts' => 1 astfel:

Când ignore_sticky_posts este setat la true sau 1, WordPress va ignora procedura de setare a postărilor lipicioase în cadrul interogării personalizate.


Ce face WordPress când ignore_sticky_posts nu este setat:

Pentru a înțelege clar ce face 'ignore_sticky_posts' => 1, trebuie să înțelegeți ce face WordPress când argumentul ignore_sticky_posts nu este setat sau este setat la false sau 0 (implicit):

  1. Dacă în rezultatul interogării există postări care fac parte din postările lipicioase, WordPress le va muta în partea de sus a rezultatului interogării.

  2. Dacă orice postare lipicioasă nu este prezentă în rezultatul interogării, WordPress va prelua din nou toate acele postări lipicioase din baza de date și le va seta în partea de sus a rezultatului interogării.

Deci, când argumentul este setat ca 'ignore_sticky_posts' => 1, WordPress pur și simplu ignoră procedura de mai sus, asta e tot. Nu le exclude în mod specific. Pentru asta trebuie să setați argumentul post__not_in.


Explicația exemplului din codex:

Acum, să venim la exemplul din codex:

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

Aici codex setează 'ignore_sticky_posts' => 1 doar pentru eficiență, nimic mai mult. Chiar și fără acesta, veți obține același rezultat așteptat:

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

Totuși, în acest caz, deoarece argumentul 'ignore_sticky_posts' => 1 nu este setat, WordPress va face inutil toată acea procedură de setare a postărilor lipicioase în partea de sus a rezultatelor, chiar dacă toate aceste rezultate (din acest exemplu) sunt doar postări lipicioase.


Cea mai bună metodă de a învăța ceva în WordPress este să examinați CODUL sursă. Deci, pentru o înțelegere și mai clară, examinați această parte din CODUL WordPress.

22 mar. 2017 09:53:34
Comentarii

WordPress ar trebui să includă răspunsul tău pe pagina lor de postare fixată!

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

Mă bucur că te-a ajutat. Codex-ul WordPress este editabil, chiar și tu poți să-l editezi și să adaugi acest răspuns ca referință pentru alții ;)

Fayaz Fayaz
22 mar. 2017 11:23:28

Acest răspuns este foarte subapreciat. De fapt, m-am întors la el de două ori, la un an distanță. Atât de confuz este acest parametru.

Benji Benji
28 mar. 2018 15:28:46

Răspuns excelent, Fayaz. Detaliat și temeinic.

jdm2112 jdm2112
9 iun. 2021 05:16:53
2

Iată o alternativă care ar fi mai ușoară în opinia mea, deși unele dintre ideile menționate deja sunt destul de bune.

    $args=array(
        'post__not_in'=>get_option('sticky_posts')
        // adaugă aici orice alte argumente dorești
    );
    $posts=new WP_Query($args);
19 iun. 2020 17:25:36
Comentarii

Aveți grijă când faceți asta, totuși. Această listă poate deveni foarte lungă, teoretic, rezultând o interogare care poate fi foarte solicitantă pentru baza de date. Ceea ce face interogarea dvs. nu este funcția reală destinată postărilor lipicioase, așa cum este explicat corect în acest răspuns: https://wordpress.stackexchange.com/a/260951/1763

Coen Jacobs Coen Jacobs
20 iun. 2020 10:52:22

Scopul este să nu includeți deloc postări lipicioase, nu doar să ignorați modul în care funcționează ideea de lipici, ci pur și simplu să nu afișați niciuna.

user2026338 user2026338
22 iun. 2020 17:04:25