Perché l'argomento ignore_sticky_posts è presente nella query dei post in evidenza?

22 mar 2017, 08:00:05
Visualizzazioni: 28.2K
Voti: 16

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?

0
Tutte le risposte alla domanda 2
4
37

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 su true o 1, 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):

  1. 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.

  2. 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.

22 mar 2017 09:53:34
Commenti

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

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

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

Fayaz Fayaz
22 mar 2017 11:23:28

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

Benji Benji
28 mar 2018 15:28:46

Risposta brillante, Fayaz. Dettagliata e approfondita.

jdm2112 jdm2112
9 giu 2021 05:16:53
2

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);
19 giu 2020 17:25:36
Commenti

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

Coen Jacobs Coen Jacobs
20 giu 2020 10:52:22

L'obiettivo è non includere affatto alcun post sticky, non solo ignorare il modo in cui funziona l'idea di sticky ma semplicemente non mostrarne nessuno.

user2026338 user2026338
22 giu 2020 17:04:25