De ce argumentul ignore_sticky_posts este folosit în interogarea articolelor fixate?
Ș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?

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 latrue
sau1
, 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):
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.
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.

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

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 ;)

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.

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
