Combinazione di WP_Query con la query principale

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:

  • su una pagina di categoria o tassonomia, visualizzando solo i post di un tipo di post
  • su una pagina di categoria, visualizzando i post con la categoria corrente e un'altra categoria o un termine tag o tassonomia
  • su una pagina per un tipo di messaggio, semplicemente visualizzando i post con determinati metadati

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.

Definizione di una variabile in base alla query principale

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.

Esempio 1: visualizzazione di solo post di un solo post in una pagina di categoria

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.

Esempio 2: combinazione della query principale con WP_Query e foreach per generare loop multipli

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.

Esempio 3: due query separate per due tipi di post

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.

Sommario

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à!