Eseguire query su custom post type basandosi sull'ID del post e sul valore di un campo personalizzato

4 feb 2013, 23:33:11
Visualizzazioni: 1.55K
Voti: 0

Potrebbe esserci già una risposta da qualche parte, ma non riesco a trovarla o a riconoscerla se l'avessi vista. Ecco la situazione:

Ho un custom post type chiamato 'region' che viene visualizzato su single-region.php. I nomi delle regioni sono Nord, Sud, Est, Ovest.

Ho un altro custom post type chiamato 'news'. Associato ad esso c'è un campo personalizzato chiamato 'news_region'. Quando viene creato un news item, l'autore deve specificare un valore per news_region (Tutti, N, S, E, W).

Quello che vorrei ottenere è che, quando sono sulla pagina della regione Nord, vengano elencati tutti gli news item con valore news_region "Tutti" OPPURE "N".

VERSIONE FINALE FUNZIONANTE (grazie a @milo per avermi indirizzato sulla strada giusta):

// ottieni il titolo della pagina regione per confrontarlo con la chiave news_region
$this_region = get_the_title($post->ID);
// query per news item con news_region Tutti o $this_region
$args = array(
    'post_type' => 'news',
    'posts_per_page' => 4,
    'meta_query' => array(
    'relation' => 'OR',
        array(
            'key' => 'news_region',
            'value' => 'Tutti',
            'compare' => 'LIKE'
            ),
        array(
            'key' => 'news_region',
            'value' => $this_region,
            'compare' => 'LIKE'
            )
        )
    );
$newslist = new WP_Query( $args );

NOTA: ho cambiato i valori di news_region in 'Tutti, Regione Nord, Regione Est, Regione Sud, Regione Ovest' per farli corrispondere ai nomi completi delle regioni (stesso titolo del post di single-region.php).

2
Commenti

Qual è il codice che stai utilizzando attualmente per quella pagina "Regione Nord"?

s_ha_dum s_ha_dum
5 feb 2013 00:41:39

Al momento sto utilizzando una query standard che elenca tutte le notizie su tutti i singoli delle regioni.

Ray Gulick Ray Gulick
5 feb 2013 14:35:40
Tutte le risposte alla domanda 2
2

Se ho capito bene, vuoi un confronto IN per news_region con meta_query per All o la prima lettera del titolo del post della regione corrente (N, S, E, W)

// ottieni la prima lettera del titolo di questo post di regione
$this_region = substr($post->post_title, 0, 1);
// query degli elementi news con news_region All o $this_region
$args = array(
    'post_type' => 'news',
    'meta_query' => array(
        array(
            'key' => 'news_region',
            'value' => array( 'All', $this_region ),
            'compare' => 'IN'
        )
    )
);
$news_posts = new WP_Query( $args );
5 feb 2013 00:45:16
Commenti

No. Non sto cercando di confrontare le prime lettere. Sto cercando di mostrare gli elementi di notizie con il campo personalizzato 'SE' allegato (potrebbero esserci più regioni in futuro) quando sono nella pagina della regione Sud-Est, e gli elementi di notizie con il campo personalizzato 'SW' quando sono nella pagina della regione Sud-Ovest. Posso vedere un indizio su come far funzionare il tuo codice utilizzando i campi personalizzati assegnati agli elementi di notizie. Proverò e tornerò. Grazie.

Ray Gulick Ray Gulick
5 feb 2013 14:34:37

Ho cambiato i valori dei campi personalizzati dalle iniziali al nome completo delle regioni. Poi ho pensato che avrei potuto confrontarli con i nomi delle regioni nelle pagine delle regioni (la Regione Nord è sia il titolo del post di una pagina regione, sia un valore del campo personalizzato news_region. Tuttavia, sto avendo problemi. La mia modifica del tuo codice non sembra catturare il titolo del tipo di post della regione per il confronto. Aggiungerò il codice alla mia domanda originale.

Ray Gulick Ray Gulick
5 feb 2013 15:06:22
0

La risposta di @Milo è corretta se vuoi risolvere il problema con la soluzione che stai proponendo, ma penso che trasformare "Regioni" in una tassonomia abbia molto più senso. (Per un po' di contesto, leggi il Problema XY.) Questo perché il comportamento del tuo tipo di post Regione è esattamente il comportamento di una pagina d'archivio di una tassonomia predefinita. Inoltre, le tassonomie offrono un'interfaccia utente più gradevole.

In aggiunta, i termini delle tassonomie hanno un campo descrizione di default. Anche se non è abilitato in ogni tema, è abbastanza semplice da aggiungere al tuo template taxonomy-region.php (supponendo che tu crei una tassonomia chiamata region).

Infine, il campo descrizione del termine è di default testo semplice, ma il plugin Rich Text Tags aggiunge un editor WYSIWYG per gestirlo facilmente.

5 feb 2013 01:29:28