Finora in questa serie hai imparato come usare WP_Query
per creare query personalizzate da utilizzare nel tema o nei plugin.
Nella maggior parte dei casi, userete WP_Query
con un set di argomenti completamente nuovo che sono separati da quello della query principale, ma cosa succede se si desidera includere la query principale nei propri argomenti?
Esempi di quando potresti voler fare questo includono:
Potrei andare avanti: ci sono molte opportunità per combinare la query principale con la tua query personalizzata.
Lo dimostrerò con tre esempi: il primo sarà un semplice esempio con un ciclo; il secondo userà per ciascuno
per generare loop multipli, uno per ogni tipo di post; e il terzo produrrà due tipi di post su un archivio di categorie usando due query separate.
Tuttavia, combinerai la tua query principale con WP_Query
, è necessario memorizzare l'oggetto query corrente in un modo che lo renda facile da usare nel tuo WP_Query
argomenti. Il modo più semplice per farlo è assegnarlo a una variabile.
Lo fai prima di definire il tuo WP_Query
argomenti, in questo modo:
$ mainquery = get_queried_object ();
Il get_queried_object ()
la funzione restituisce l'oggetto attualmente interrogato, qualunque esso sia. Su un singolo post, restituirà solo l'oggetto post, mentre su un archivio restituirà la categoria, tag, term object o qualsiasi oggetto correlato all'archivio. Restituisce l'ID dell'oggetto interrogato.
Puoi quindi usarlo $ MainQuery
variabile nel tuo WP_Query
argomenti. Ora diamo un'occhiata ad alcuni esempi.
Supponiamo che al tuo sito sia stato aggiunto un tipo di post personalizzato e che tu abbia attivato categorie per quel tipo di post personalizzato. Nell'archivio delle categorie per ogni categoria, non si desidera visualizzare i post: invece si desidera visualizzare i post del nuovo tipo di post, chiamiamolo Prodotto
.
La tua query potrebbe essere simile a questa:
$ mainquery-> slug, 'post_type' => 'prodotto'); // Query personalizzata. $ query = new WP_Query ($ args); // Controlla che abbiamo i risultati delle query. if ($ query-> have_posts ()) // Inizia il ciclo sui risultati della query. while ($ query-> have_posts ()) $ query-> the_post (); // I contenuti dei risultati dei post interrogati vanno qui. // Ripristina i dati del post originale. wp_reset_postdata (); ?>
Perché il Nome della categoria
il parametro che ho usato sopra prende la categoria slug come argomento, è necessario aggiungere -> slug
dopo la variabile per emettere la categoria slug.
Questo ti dà una query che recupera i post di Prodotto
inserisci il tipo dal database con la categoria attualmente interrogata. Lo useresti su category.php
modello di pagina.
Nota: potresti anche ottenere questo risultato usando il pre_get_posts
agganciare per modificare la query principale, combinata con una funzione condizionale per verificare gli archivi delle categorie.
Il prossimo esempio mostrerà tutti i post per la pagina della categoria corrente, ma invece di mostrarli tutti in un blocco li separerà per tipo di post.
Ciò significa che puoi ordinare i tuoi tipi di post in blocchi o colonne della tua pagina usando CSS, o semplicemente separarli in elenchi diversi.
Per fare ciò, devi usare il seguente codice:
$ mainquery-> slug, 'post_type' => $ post_type); // Query personalizzata. $ query = new WP_Query ($ args); // Controlla che abbiamo i risultati delle query. if ($ query-> have_posts ()) // Inizia il ciclo sui risultati della query. while ($ query-> have_posts ()) $ query-> the_post (); // I contenuti dei risultati dei post interrogati vanno qui. // Ripristina i dati del post originale. wp_reset_postdata (); ?>
Questo usa il $ MainQuery
variabile che abbiamo usato prima, ma aggiunge anche a $ post_types
variabile per memorizzare tutti i tipi di post registrati sul sito e a $ post_type
variabile per memorizzare a turno ogni singolo tipo di messaggio.
L'ultimo esempio è simile al secondo, ma separa i tipi di post in due query separate, ognuna con un proprio ciclo distinto. Questo ti dà un maggiore controllo su ciò che viene visualizzato per ciascuno, in modo da poter visualizzare i post in modo diverso dai prodotti, magari includendo un'immagine in primo piano per i prodotti o dando loro un layout diverso.
Diciamo che il tuo sito ha il Prodotto
inserisci il tipo registrato, con le categorie abilitate e scrivi anche post di blog con le stesse categorie. Su ogni pagina di archivio di categorie si desidera visualizzare i dieci post più recenti e quindi si desidera visualizzare un elenco di tutti i prodotti nella stessa categoria.
Per fare questo, dovresti usare qualcosa come questo codice:
$ mainquery-> slug, 'post_type' => 'post', 'posts_per_page' => '10'); // Query personalizzata. $ query = new WP_Query ($ args); // Controlla che abbiamo i risultati delle query. if ($ query-> have_posts ()) // Inizia il ciclo sui risultati della query. while ($ query-> have_posts ()) $ query-> the_post (); // I contenuti dei risultati dei post interrogati vanno qui. // Ripristina i dati del post originale. wp_reset_postdata (); // Secondo argomento di query per i prodotti. $ args = array ('category_name' => $ mainquery-> slug, 'post_type' => 'product', 'posts_per_page' => '-1'); // Query personalizzata. $ query = new WP_Query ($ args); // Controlla che abbiamo i risultati delle query. if ($ query-> have_posts ()) // Inizia il ciclo sui risultati della query. while ($ query-> have_posts ()) $ query-> the_post (); // I contenuti dei risultati dei post interrogati vanno qui. // Ripristina i dati del post originale. wp_reset_postdata (); ?>
Dovresti quindi scrivere ogni ciclo in modo diverso per generare dati diversi per ogni tipo di post.
Come puoi vedere dagli esempi sopra, è possibile utilizzarlo WP_Query
non solo per creare query completamente personalizzate separate dalla query principale, ma anche per incorporare l'oggetto attualmente interrogato e creare query più potenti sulle pagine di archivio.
Gli esempi sopra possono anche essere fatti con altri tipi di archivio: per tassonomie, autori, date e altro. Vedi se riesci a trovare più possibilità!