Perché l'argomento ignore_sticky_posts è presente nella query dei post in evidenza?
Sappiamo tutti che ignore_sticky_posts
viene utilizzato per escludere i post in evidenza dalla tua query personalizzata.
Ma perché nella documentazione dello sviluppo dei temi WordPress, utilizzano ignore_sticky_posts
nell'interrogazione dei post in evidenza?
$args = array(
'posts_per_page' => 1,
'post__in' => get_option( 'sticky_posts' ),
'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );
Questo è davvero confuso e non ha senso! Li vuoi visualizzare eppure li escludi?

Tutti sappiamo che
ignore_sticky_posts
viene utilizzato per escludere i post sticky dalla tua query personalizzata.
- No, questa supposizione è sbagliata.
Cosa significa veramente ignore_sticky_posts
:
Anche se in inglese naturale, ignore_sticky_posts
sembra che WordPress debba ignorare tutti i post sticky dalla query, in realtà non è ciò che WordPress fa. Invece, dovresti interpretare l'argomento 'ignore_sticky_posts' => 1
nel seguente modo:
Quando
ignore_sticky_posts
è impostato sutrue
o1
, WordPress ignorerà la procedura di impostazione dei post sticky all'interno della tua query personalizzata.
Cosa fa WordPress quando ignore_sticky_posts
non è impostato:
Per capire chiaramente cosa fa 'ignore_sticky_posts' => 1
, devi comprendere cosa fa WordPress quando l'argomento ignore_sticky_posts
non è impostato o è impostato su false
o 0
(valore predefinito):
Se ci sono post all'interno dei risultati della query che fanno parte dei post sticky, WordPress li sposterà in cima ai risultati della query.
Se un post sticky non è presente nei risultati della query, WordPress recupererà nuovamente tutti quei post sticky dal database e li posizionerà in cima ai risultati della query.
Quindi, quando l'argomento è impostato come 'ignore_sticky_posts' => 1
, WordPress semplicemente ignora la procedura sopra descritta, tutto qui. Non li esclude specificamente. Per farlo, devi impostare l'argomento post__not_in
.
Spiegazione dell'esempio del codex:
Ora, veniamo all'esempio del codex:
$args = array(
'posts_per_page' => 1,
'post__in' => get_option( 'sticky_posts' ),
'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );
Qui il codex sta solo impostando 'ignore_sticky_posts' => 1
per essere efficiente, niente di più. Anche senza di esso, otterrai lo stesso risultato atteso:
$args = array(
'posts_per_page' => 1,
'post__in' => get_option( 'sticky_posts' )
);
$query = new WP_Query( $args );
Tuttavia, in questo caso, poiché l'argomento 'ignore_sticky_posts' => 1
non è impostato, WordPress eseguirà inutilmente tutta quella procedura di posizionamento dei post sticky in cima ai risultati, anche se tutti questi risultati (da questo esempio) sono solo post sticky.
Il modo migliore per imparare qualcosa in WordPress è esaminare il codice CORE. Quindi, per una comprensione ancora più chiara, esamina questa parte del codice di WordPress.

WordPress dovrebbe includere la tua risposta nella loro pagina di post sticky!

Mi fa piacere che ti sia stato utile. Il codex di WordPress è modificabile, puoi anche modificarlo tu e aggiungere questa risposta come riferimento per altri ;)

Questa risposta è molto sottovalutata. Sono tornato a leggerla due volte, a distanza di un anno. Ecco quanto è confuso questo parametro.

Ecco un'alternativa che, secondo me, sarebbe più semplice, anche se alcune delle idee già menzionate sono piuttosto valide.
$args=array(
'post__not_in'=>get_option('sticky_posts')
// aggiungi qui eventuali altri argomenti che desideri
);
$posts=new WP_Query($args);

Fai attenzione quando fai questo però. Questa lista può diventare davvero lunga, in teoria, risultando in una query che è molto pesante per il database potenzialmente. Ciò che fa la tua query non è la funzione effettiva prevista per i post sticky, come spiegato correttamente in questa risposta: https://wordpress.stackexchange.com/a/260951/1763
