Interogare înregistrări după ID-ul taxonomiei personalizate

7 oct. 2011, 16:06:24
Vizualizări: 47.7K
Voturi: 8

Am un tip de postare personalizat numit portfolio și o taxonomie personalizată numită build-type (care acționează ca și categorii)

Încerc să interoghez postările de tip portfolio după ID-ul din build-type, de exemplu toate postările Portfolio din "Hotels" (id=4 pentru acea taxonomie)

// preia ID-ul dintr-un câmp personalizat pentru a afișa postări pe o pagină specifică
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// execută interogarea
query_posts(array( 
    'post_type' => 'portfolio',
    'showposts' => -1,
    'tax_query' => array(
        'taxonomy' => 'build-type',
        'terms' => $buildType,
        'field' => 'term_id'
    ),
    'orderby' => 'title',
    'order' => 'ASC'
));

În prezent, aceasta afișează toate postările de tip portfolio și nu doar cele cu ID-ul din build-type

Pentru 'field' => 'term_id' ar trebui să folosesc term_id, tag_ID, id sau altceva?

Știe cineva cum să rezolv această problemă?

Mulțumesc anticipat!

0
Toate răspunsurile la întrebare 4
2
14

Motivul pentru care nu funcționează este că 'tax_query' trebuie să fie un array de array-uri (știu, este confuz).

...

'tax_query' => array(
    array(
        'taxonomy' => 'build-type',

...

Este structurat astfel pentru a putea grupa mai multe reguli diferite împreună.

7 oct. 2011 19:00:40
Comentarii

Bună Drew. Asta a rezolvat problema. Am postat scriptul final pe Github https://gist.github.com/1275191

mattberridge mattberridge
10 oct. 2011 15:36:04

Noroc! Am petrecut o oră din bugetul clientului rezolvând această problemă minoră :)

Tom Tom
9 ian. 2017 17:34:10
3

Drew avea dreptate, tax-query trebuie să fie un array de array-uri

Soluția finală este:

// obține ID-ul dintr-un câmp personalizat pentru a afișa postări pe o anumită pagină
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// execută interogarea
query_posts(array( 
    'post_type' => 'portfolio',
    'showposts' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'build-type',
            'terms' => $buildType,
            'field' => 'term_id',
        )
    ),
    'orderby' => 'title',
    'order' => 'ASC' )
);

Pe github aici:

https://gist.github.com/1275191

Mulțumesc!

19 oct. 2011 11:27:49
Comentarii

Refuzarea răspunsului meu și acceptarea propriului tău răspuns chiar doare, omule... mă doare în suflet. Dacă are nevoie cineva de mine, voi fi în lounge.

Drew Gourley Drew Gourley
19 oct. 2011 16:07:24

Hah, scuze, amice. Sunt nou în toate astea, nu mi-am dat seama că poți avea doar un răspuns acceptat. O să-l marchez din nou ca să poți reveni din lounge.

mattberridge mattberridge
20 oct. 2011 13:28:04

Haha, omule, e în regulă, doar glumeam - dacă vrei să-ți accepți propriul răspuns, e perfect permis, dar asigură-te să-mi dai un Upvote la răspunsul meu ca să primesc măcar niște puncte de dragoste.

Drew Gourley Drew Gourley
20 oct. 2011 16:34:36
0

Trebuie să creați un array în interiorul tax_query unde puteți selecta și operatori. De exemplu, un print_r al tax_query ar trebui să arate astfel.

Array
(
    [relation] => AND
    [0] => Array
        (
            [taxonomy] => build-type
            [terms] => Array
                (
                    [0] => term1
                    [1] => term2blabla
                )

            [field] => slug
            [operator] => IN
        )

    [1] => Array
        (
            [taxonomy] => another-taxonomie
            [terms] => Array
                (
                    [0] => term1
                    [1] => term2
                )

            [field] => slug
            [operator] => IN
        )

)

Desigur, puteți schimba field pentru id, dar eu întotdeauna am folosit slug-uri pentru a păstra lucrurile simple. După cum puteți vedea, puteți interoga mai multe taxonomii în acest fel.

7 oct. 2011 19:28:53
0
-1

nu este nevoie să folosești tax_query, elimină-l și adaugă următoarele:

term=>tip-constructie,'tip-constructie=>hoteluri' de exemplu.

8 oct. 2011 01:40:36