web-dev-qa-db-fra.com

Puis-je interroger des métadonnées personnalisées via WP_Query

Ok, ma question est un peu complexe, je vais donc essayer de donner une explication générale, puis d’entrer dans les détails par la suite.

J'utilise WordPress 3.4.2 et j'utilise WCK Post Type Creator et WCK Custom Fields Creator pour créer mon type d'article personnalisé et mes champs personnalisés.

J'essaie d'interroger des publications à partir du type de publication personnalisé "entreprise" auquel est associé un champ personnalisé "spécial". Mon problème est que je voudrais être plus précis et ne recevoir qu'un certain type de spécial (défini dans le plugin Custom Fields Creator) mais je ne sais pas si/comment je peux le faire en utilisant l'argument meta_query pour WP_Query.

Ce que j'ai maintenant va extraire les articles du type d'article, mais je dois ensuite utiliser get_post_meta () pour trouver les champs personnalisés et les parcourir en boucle en effectuant des tests pour ce que je veux. Voici ce que j'ai en ce moment:

<?php   
$args = array(
    'post_type' => 'business',
    'meta_query'  => array(
                array(
                    'key' => 'specials'
                )
            )

    );
$loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post(); 

$specials = get_post_meta( $post->ID, 'specials'); 

//Loop through array    of specials
foreach( $specials as $special){

    //Loop through each special
    foreach($special as $individual){

    //Check to see is there is a drink special
    if ($individual ['type-of-special'] == 'Drink' ) { 
        //Do stuff          

    }//indivdual
    }//special
} //specials

endwhile; ?>

Donc, ce que je fais ici, c'est extraire les posts, puis pour chaque envoi obtenir les méta-données 'specials' et faire une boucle dans les différents tableaux pour vérifier quel type de spécial il est, puis afficher des éléments si c'est le bon type de spécial. Existe-t-il un moyen d’être plus spécifique dans mon WP_query afin que je ne renvoie que les messages d’un certain type de spécial?

Le problème que je semble rencontrer est que je ne sais pas comment creuser assez loin dans les tableaux multidimensionnels que le champ personnalisé 'specials' doit vérifier pour les valeurs avec l'argument meta_query pour WP_Query.

Si j'imprime $ special dans le foreach ($ specials en tant que $ special), je reçois ceci:

Array
(
    [0] => Array
        (
            [type-of-special] => Drink
            [name-of-special] => Pumpkin Latte
            [price] => 2.00
            [day-of-the-week] => Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
        )
)

Donc, je ne sais pas comment accéder à la clé [type-of-special] pour vérifier sa valeur via meta_query.

Je sais que c'est beaucoup d'informations et j'apprécie vraiment tout retour d'information et toute aide pour résoudre ce problème. Si vous avez besoin de plus d'informations ou de clarification sur quelque chose, s'il vous plaît faites le moi savoir. Merci encore!

6
yoxalld

Normalement, il vous suffit de spécifier une méta_value, par exemple:

 $args = array(
     'post_type' => 'business',
     'meta_query'  => array(
            array(
                'key' => 'specials',
                'value' => 'these are not the specials you are looking for - Obi Wan Kenobi'
            )
        )

);

Cependant, comme votre publication meta est en fait une structure de données, un tableau/objet sérialisé PHP, ce n'est pas possible.

Vous pouvez lire plus ici:

http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

10
Tom J Nowell