web-dev-qa-db-fra.com

Comment puis-je afficher toutes les valeurs d'un champ personnalisé à partir de publications avec une certaine valeur d'un autre champ personnalisé ou de certains types de publication?

Je sais que la question est assez ambiguë. Laisse-moi expliquer:

J'ai une page qui répertorie tous les messages avec une certaine valeur d'un champ personnalisé. (Exemple: la page Rentals répertorie toutes les publications avec la valeur rental du champ personnalisé offer_type).

J'aimerais ajouter une option de filtrage par ville, afin que seules les publications avec une certaine valeur de city champ personnalisé soient affichées. Pour cela, j'ai créé un formulaire à l'aide de la méthode get qui crée une requête personnalisée (dans mon exemple, avec deux champs personnalisés, "offer_type" et "city").

Ce dont j'ai besoin est un moyen de répertorier toutes les villes (valeurs du champ personnalisé city) pour les publications ayant la valeur rental de offer_type. Chaque ville doit être répertoriée une fois.

J'ai essayé ce morceau de code (notez que j'ai pris tout le formulaire):

$metakey = 'city';
   $cities = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT meta_value 
           FROM $wpdb->postmeta WHERE meta_key = %s ORDER BY meta_value ASC", $metakey) );

   if ($cities) {   
                 foreach ( $cities as $city ) {
                 echo $city;
            }
        }

mais cela répertorie toutes les valeurs du champ personnalisé city pour toutes les publications (donc si, par exemple, j'ai une publication avec une valeur de offer_type différente de rental, sa valeur de city est affichée dans ma liste).

Je sais que le problème concerne les requêtes SQL et les tables de jointure, mais je manque vraiment de compétences pour résoudre ce problème.

S'il vous plaît aider!

4
rereradu

consultez la documentation de référence de la classe WP_Query: http://codex.wordpress.org/Class_Reference/WP_Query

quelque chose comme ça:

$args = array(
  //some key/value pairs...whatever
          'meta_query => array(
                          array(
                         'key' => somekey,
                         'value' => somevalue,
                         'compare' => some comparison operator
                         ),
                         array(
                         'key' => some other key,
                         'value' => some other value,
                         'compare' => some comparison operator
                         )
                     )
               )

$my_query = new WP_Query( $args );

//some code to do something with the results of the query
1

ce n'est pas une réponse directe à votre question, mais une ligne de code que vous utiliseriez comme référence pour travailler.

voici une copie de ce que j’utilise pour chercher dans ma table, je cherche entre une plage de données et la limite ensuite à l’affichage des instances d’un usr_id entré

 $this->items = $wpdb->get_results($wpdb->prepare("SELECT  *  FROM $table_name WHERE `datec` BETWEEN CAST('$start_date' AS DATE) AND CAST('$end_date' AS DATE) AND `usr_id`= $usr_id"), ARRAY_A);

j'espère que cela t'aides :)

0
Alexander