Interogare tip postare personalizată bazată pe ID-ul postării și valoarea câmpului personalizat

4 feb. 2013, 23:33:11
Vizualizări: 1.55K
Voturi: 0

Poate exista deja un răspuns undeva, dar nu reușesc să-l găsesc sau să-l recunosc dacă l-aș vedea. Iată situația:

Am un tip de postare personalizată, 'region', care se afișează pe single-region.php. Numele regiunilor sunt Nord, Sud, Est, Vest.

Am un alt tip de postare personalizată, 'news'. Asociat cu acesta este un câmp personalizat numit 'news_region'. Când se creează o știre, autorul trebuie să specifice o valoare pentru news_region (Toate, N, S, E, W).

Ceea ce aș dori să se întâmple este, când sunt pe pagina regiunii Nord, să fie listate toate știrile cu valoarea news_region "Toate" SAU "N".

VERSIUNEA FINALĂ CARE FUNCȚIONEAZĂ (mulțumesc lui @milo pentru îndrumare):

// obține titlul paginii regiunii pentru comparație cu cheia news_region
$this_region = get_the_title($post->ID);
// interoghează știrile cu news_region Toate sau $this_region
$args = array(
    'post_type' => 'news',
    'posts_per_page' => 4,
    'meta_query' => array(
    'relation' => 'OR',
        array(
            'key' => 'news_region',
            'value' => 'Toate',
            'compare' => 'LIKE'
            ),
        array(
            'key' => 'news_region',
            'value' => $this_region,
            'compare' => 'LIKE'
            )
        )
    );
$newslist = new WP_Query( $args );

NOTĂ: am schimbat valorile news_region în 'Toate, Regiunea Nord, Regiunea Est, Regiunea Sud, Regiunea Vest' pentru a se potrivi cu numele complete ale regiunilor (la fel ca titlul postării de pe single-region.php).

2
Comentarii

Ce cod folosești acum pentru acea pagină "Regiunea Nord"?

s_ha_dum s_ha_dum
5 feb. 2013 00:41:39

În prezent folosesc o interogare standard care listează toate articolele de știri pe toate paginile unice ale regiunilor.

Ray Gulick Ray Gulick
5 feb. 2013 14:35:40
Toate răspunsurile la întrebare 2
2

Dacă te-am înțeles corect, vrei o comparație IN pentru news_region meta_query fie pentru All, fie pentru prima literă din titlul postării regiunii curente (N, S, E, W)

// obține prima literă din titlul acestei postări de regiune
$this_region = substr($post->post_title, 0, 1);
// interoghează elementele de știri cu news_region All sau $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
Comentarii

Nu. Nu încerc să compar primele litere. Încerc să afișez elementele de știri cu câmpul personalizat 'SE' atașat (ar putea fi mai multe regiuni mai târziu) când sunt pe pagina Regiunii de Sud-Est și elementele de știri cu câmpul personalizat 'SW' când sunt pe pagina Regiunii de Sud-Vest. Pot vedea un indiciu despre cum să fac codul tău să funcționeze folosind câmpurile personalizate atribuite elementelor de știri. O să încerc și revin. Mulțumesc.

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

Am schimbat valorile câmpurilor personalizate de la inițiale la numele complet al regiunilor. Apoi, m-am gândit că le-aș putea compara cu numele regiunilor de pe paginile regiunilor (Regiunea Nord este atât titlul postării unei pagini de regiune, cât și o valoare a câmpului personalizat news_region. Am întâmpinat dificultăți, totuși. Modificarea mea a codului tău nu pare să preia titlul tipului de postare al regiunii pentru comparație. Voi adăuga cod la întrebarea mea inițială.

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

Răspunsul lui @Milo este corect dacă doriți să rezolvați problema cu soluția pe care o propuneți, dar cred că transformarea "Regiunilor" într-o taxonomie are mult mai mult sens. (Pentru un pic de context, citiți Problema XY.) Acest lucru se datorează faptului că comportamentul tipului de postare Region este exact comportamentul unei pagini de arhivă a taxonomiei implicite. Taxonomiile vin și cu o interfață mai prietenoasă.

În plus, termenii taxonomiei au un câmp de descriere în mod implicit. Deși nu este activat pe fiecare temă, este destul de ușor de adăugat în șablonul taxonomy-region.php (asta presupunând că creați o taxonomie numită region).

În cele din urmă, câmpul de descriere al termenului este text simplu în mod implicit, dar plugin-ul Rich Text Tags adaugă un editor WYSIWYG frumos pentru a rezolva această problemă.

5 feb. 2013 01:29:28