Eseguire query su custom post type basandosi sull'ID del post e sul valore di un campo personalizzato
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).

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

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.

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.

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.
