質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.05%

WordpressのWP_Queryでカスタムフィールドの値を指定して投稿記事を取得したい

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 339

score 0

Wordpressでアドバンスカスタムフィールドの値を使って投稿の検索表示を行いたい

WordPressでWP_Queryを使い、アドバンスカスタムフィールドの値を指定して投稿記事を取得したいのですが、上手く抽出できません。プラグインのアドバンスカスタムフィールドをインストールしています。

発生している問題

meta_queryでACFの項目を指定しての抽出が0件になってしまいます。

下記コードで全投稿の抽出ができました。
var_dump($post_count)→int(6)
var_dump($found_posts)→int(6)
※投稿記事が6つあります。

<?php
$args = array(
  'post_type' => 'post', 
  'posts_per_page' => -1,
  'no_found_rows' => false,
);

$the_query = new WP_Query($args);

$post_count  = $the_query->post_count;
$found_posts = $the_query->found_posts;
var_dump($post_count);
var_dump($found_posts);
?>

該当のソースコード

下記のようなカスタムフィールドがあります

■フィールドグループ…カテゴリ

■フィールド
フィールドラベル:テスト1
フィールド名:test1
フィールドタイプ:チェックボックス
選択肢:test1
    test2
    test3
レイアウト:水平
返り値:value
ルール:「投稿タイプ」「等しい」「投稿」
<?php
$args = array(
  'post_type' => 'post', 
  'posts_per_page' => -1,
  'no_found_rows' => false,
  'meta_query' => array( 
    'relation' => 'AND',


    array(
      'key' => 'test1',
      'value' => array('test1','test2'),
      'type' => 'CHAR',
      'compare' => 'IN'
    ),
  )
);

$the_query = new WP_Query($args);


$post_count  = $the_query->post_count;
$found_posts = $the_query->found_posts;
var_dump($post_count);
var_dump($found_posts);

if ($the_query->have_posts()) :
  while ($the_query->have_posts()) : $the_query->the_post();


  endwhile;
endif;
wp_reset_postdata();
?>


カテゴリ美設定(未分類)でカスタムフィールドのテスト1項目test1、test2、test3にチェックを付けた投稿が1つありますが、抽出できませんでした。
var_dump($post_count)→int(0)
var_dump($found_posts)→int(0)

試したこと

meta_queryのvalueの指定、カスタムフィールド内の選択肢が原因かと思い変更してみました。

➊カスタムフィールドの選択肢を
test1:test1
test2:test2
test3:test3
として、投稿記事の編集でもチェックを付け直しました。
結果は変わらず、投稿の取得件数は0件です。
var_dump($post_count)→int(0)
var_dump($found_posts)→int(0)

➋meta_queryのcompareを「'compare' => 'IN'」から「'compare' => '='」に変更しました。
結果はエラーとなり、下記メッセージが表示されました。

Warning: trim() expects parameter 1 to be string, array given ~ /class-wp-meta-query.php on line 695

$args内の'meta_query'、カスタムフィールドの設定、どのように変更すれば投稿を取得できるでしょうか?。
ご教授のほどよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

ACFのチェックボックスはデータがシリアライズされて一つのフィールドにまとめられるようです
例としてtest1,test2,test3にすべてにチェックを入れた場合

a:3:{i:0;s:5:"test1";i:1;s:5:"test2";i:2;s:5:"test3";}


このような値で登録されています。一応LIKE検索で取得はできるでしょうがおすすめできません。
可能であればカスタム分類などに変更して検索用カスタム分類を作ったほうがいいと思います。

ちょっと古いみたいですが参考
Advanced Custom Fieldsのチェックボックスは検索に向いてない

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る