web-dev-qa-db-ja.com

別のカスタムフィールドの特定の値を持つ投稿、または特定の投稿の種類の投稿からカスタムフィールドのすべての値を表示する方法を教えてください。

私はその質問がかなりあいまいであることを知っています。説明させてください:

特定の値のカスタムフィールドを持つすべての投稿を一覧表示するページがあります。 (例:Rentalsページには、カスタムフィールドoffer_typeの値rentalを持つすべての投稿が一覧表示されます)。

特定の値のcityカスタムフィールドを持つ投稿のみが表示されるように、都市別のフィルタリングオプションを追加します。このために、カスタムクエリを作成するgetメソッドを使用してフォームを作成しました(私の例では、 'offer_type'と 'city'という2つのカスタムフィールドがあります)。

必要なものは、投稿のすべての都市(cityカスタムフィールドの値)をrentalの値offer_typeで一覧表示する方法です。各都市は一度リストされなければなりません。

このコードを試してみました(すべてのフォームをまとめて表示しています)。

$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;
            }
        }

しかし、これはすべての投稿に対するcityカスタムフィールドのすべての値を一覧表示します(したがって、たとえばrentalと異なる値のoffer_typeを持つ投稿がある場合、そのカスタムフィールドの値cityはカスタムリストに表示されます)。

私は問題がSQLクエリとテーブルの結合を中心に展開していることを知っていますが、私は本当にこの問題を解決するためのスキルを欠いています。

助けてください!

4
rereradu

wP_Queryクラスの参照ドキュメントを見てください。 http://codex.wordpress.org/Class_Reference/WP_Query

このようなもの:

$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

これはあなたの質問に対する直接的な答えではありませんが、作業の参考として使用するコードの行です。

これは私が私のテーブルを通して検索するのに使用しているもののコピーです、私はデータ範囲の間で検索し、それから入力されたusr_idのインスタンスのみを表示するように制限します

 $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);

お役に立てれば :)

0
Alexander