• 解決済 yah!!

    (@yahss)


    複数のタグを全部含む投稿は通常は

    query_posts( array( 'tag__and' => array( 37, 47 ) ) );
    query_posts('tag=tag1+tag2');

    のように、WordPressの関数と引数で抽出可能です。

    他の条件との組み合わせの絞り込みの関係でどうしてもsql文で抽出する必要が生じています。

    $sql = "
    SELECT P.ID
    FROM wp_posts AS P
    LEFT JOIN wp_term_relationships AS TR ON P.ID=TR.object_id
    LEFT JOIN wp_terms AS TERMS ON TR.term_taxonomy_id=TERMS.term_id
    WHERE P.post_status='publish'
    AND P.post_type = $post_type
    AND TERMS.name IN ('tag1','tag2')
    ";
    $postIds = $wpdb->get_results($sql, ARRAY_A);

    上記で tag1 or tag2 のどちらかを含む投稿を抽出できます。

    しかし、tag1 と tag2 のどちとも含む投稿を抽出する必要があります。
    どのようにsql文にしたらよろしいでしょうか。

    WordPressというよりsqlの質問になってしまっていますが、
    どなたか方法を教えていただけないでしょうか。

    よろしくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • query_posts でも WP_Query でも、そのような場合は tax_query を使ってください。
    http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts

    トピック投稿者 yah!!

    (@yahss)

    gatespaceさん、ご回答ありがとうございます。

    そうですよねぇ。WordPressの便利な関数を使え、という感じですよね。

    カスタムフィールドの値をそのまま検証するなら、WordPressの関数だけでかなり複雑な条件の絞り込みも可能なのですが、他の条件の兼ね合い(下記詳述)でWordPressの関数だけでは対応できないケースです。

    例えば、カスタムフィールドに格納された料金情報を元に消費税やら割引などを適用した値で絞り込みする場合は、meta_valueを素のままではなく消費税やら割引率やらを適用(計算)した値で絞り込みを行う必要があります。そのような計算はWordPress関数では不可能ですが、sql文では可能です。

    投稿を、
    ①そのような計算の伴う絞り込みを行いつつ、且、
    ②複数のtagを持つ、という絞り込み条件を加えようとしています。

    ①で絞り込んだあと、loop内で一つ一つtagのありなしを判断することはできますが、それも賢い方法でもないし
    などと考えてフォーラムで質問させていただきました。

    と、ここまでこの投稿を記述してきたのですが、
    今回の場合は、その計算値が変動せず固定値にできますので、投稿の保存時に別のカスタムフィールドに最初から計算値を格納することができそうです。
    そうすれば、絞り込み時の計算が必要ないので、WordPressの関数の組み合わせで実現できますね。

    でも、将来、今回の質問の答えが必要になると思いますので、
    sql文での解決方法、もしくは、こうすればというお知恵がありましたら、
    どなたかご提案いただけないでしょうか。

    ちょっとの間だけまだこのトピックをオープンにさせていただきます。
    よろしくお願いいたします。

    トピック投稿者 yah!!

    (@yahss)

    カスタムフィールド値の保存時に、
    計算結果を別のカスタムフィールドに保存させることで対応しました。

    解決済みといたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「複数タグ全部を含む投稿idをsql文で抽出」には新たに返信することはできません。