2016-04-23 3 views
0

Ich möchte Posts eines bestimmten Post-Typs erhalten, wo diese ein benutzerdefiniertes Feld mit einem Post-Typ haben.Wie erhalten Sie Beiträge gefiltert nach benutzerdefinierten Feld, das Post-Objekttyp ist?

Ich habe Post-Typ namens "Tour", und Tour Post-Typ hat benutzerdefinierte Feld namens "Land", dass sein Typ ist Post-Objekt.

Die Abfrage für alle Touren erhalten, die ihr Land „Türkei“ ist:

$located_tours = get_posts(array(
    'numberposts' => -1, 
    'post_type'  => 'tour', 
    'meta_query' => array(
     'key'  => 'country', 
     'title'  => 'Turkey', 
     'compare' => 'LIKE' 
    ) 
)); 

Aber diese Abfrage zurückgeben alle Touren ohne Filterung auf Land

jemand eine Idee? Dank

Antwort

0

Zunächst einmal meta_queryexpects nested arrays, so ist es nicht:

'meta_query' => array(
    'key' => THE_KEY, 
    'value' => THE_VALUE, 
), 

aber:

'meta_query' => array(
    array(
     'key'  => THE_KEY, 
     'value' => THE_VALUE, 
    ), 
), 

Beachten Sie, dass compare nicht notwendig in Ihrem Fall als Standard va lue ist =.

Wie auch immer, Sie haben hier einen konzeptionellen Fehler. Wenn Sie mit ACF und Ihrem country benutzerdefinierten Feldtyp ist Post Object, der Wert für dieses Feld in der Datenbank gespeichert ist nicht title aber das damit verbundene Beitrag ID (entweder Ihr Return Format ist Post Object oder Post ID).

So etwas (in Ihrer wp_postmeta Tabelle):

wp_postmeta detail

So müssen Sie nach Land ID abzufragen, nicht Land Titel. Sie könnten get_page_by_title benutzen, um Ihre gewünschte Land ID abzurufen:

// Assuming your Country's CPT slug is 'country' 
$country = get_page_by_title('Turkey', 'OBJECT', 'country'); 

$tours_args = array(
    'posts_per_page' => -1, 
    'post_type'   => 'tour', 
    'meta_query'  => array(
     array(
      'key' => 'country', 
      'value' => $country->ID 
     ) 
    ) 
); 

$located_tours = get_posts($tours_args); 

hoffe, das hilft!

+0

Vielen Dank! Es funktioniert auch :) – Mehdi

+0

Gern geschehen @Mehdi :) –

0

Versuchen Sie folgendes:

$tour_args = array(
    'posts_per_page' => -1, 
    'post_type'  => 'tour',   
    'meta_query' => array(
    array(
     'key'  => 'country', 
     'value' => 'Turkey', 
     'compare' => '=', 
    ), 
    ), 
); 
$located_tours = new WP_Query($tour_args); 
+0

Danke @vrajesh aber es gibt immer noch alle Beiträge – Mehdi

+0

Ich habe meine Antwort aktualisiert. Bitte überprüfen Sie jetzt – vrajesh