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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1135閲覧

ワードプレスプラグイン「ACF」のフィールドタイプ「投稿オブジェクト」の検索にてカスタムフィールドの値も参照したい

east

総合スコア13

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/01/21 15:43

編集2019/01/22 08:39

お世話になっております。タイトルのとおりなのですが、問題を解決できずに困っています。どうぞ問題解決のため手助けいただきたいです。
発生している問題
ワードプレスACFのフィールドタイプ「投稿オブジェクト」の検索を行った際にタイトルや本文を参照して関連記事を出力してくれますが、カスタムフィールドの値が参照されません。以下のコードでカスタムフィールドも参照するように試してみたのですが、どうにも上手くいきません。

PHP

1//タイトルもしくはカスタムフィールドで検索 2add_action( 'pre_get_posts', function( $q ) 3{ 4 if( $title = $q->get( '_meta_or_title' ) ) 5 { 6 add_filter( 'get_meta_sql', function( $sql ) use ( $title ) 7 { 8 global $wpdb; 9 10 // Only run once: 11 static $nr = 0; 12 if( 0 != $nr++ ) return $sql; 13 14 // Modified WHERE 15 $sql['where'] = sprintf( 16 " AND ( %s OR %s ) ", 17 $wpdb->prepare( "{$wpdb->posts}.post_title like '%%%s%%'", $title), 18 mb_substr( $sql['where'], 5, mb_strlen( $sql['where'] ) ) 19 ); 20 21 return $sql; 22 }); 23 } 24}); 25//投稿オブジェクト 26function my_post_object_query( $args, $field, $post_id ) { 27 $args['_meta_or_title']=$args['s']; 28 $args['meta_query'] = array( 29 array( 30 'key' => 'ここにカスタムフィールドのキーを入力', 31 'value' => $args['s'], 32 'compare' => 'LIKE', 33 ) 34 ); 35 return $args; 36} 37add_filter('acf/fields/post_object/query', 'my_post_object_query', 10, 3);

実現したいこと
タイトルもしくはカスタムフィールドで参照できるようにしたいのですが、どのようにしたらよろしいか教えていただけますと幸いです。

参照した記事
ACF公式サイト

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/01/22 01:27

「WordPress」をタグに追加してください。独自仕様も多く「PHP」だけの知識技術では対応しきれないことのほうが多いです。
east

2019/01/22 08:39

ご助言ありがとうございます! タグを追加させていただきました!
guest

回答1

0

ベストアンサー

コードをざっくりと見ただけですが...

get_meta_sql フックを使われているようですが、他の部分で設定される「通常の検索条件(タイトル、本文、抜粋)」との兼ね合いはどうなっているでしょうか?

「通常の検索条件」と get_meta_sqlフックで記載されている「タイトル」と「カスタムフィールド」の「いずれか」のフィールドで「検索キーワード」を含んでいる場合に出力させたいということでしょうか?

質問に記載されたコードでは、おそらく 「通常の検索条件(タイトル、本文、抜粋)」 and 「get_meta_sqlフックの条件」で検索されるのでないかと思われます。
そのため、カスタムフィールドにしかないキーワードでは、検索できないのだと思います。

本質的な解決ではないかもしれませんが、たとえば...

$sql['where'] = sprintf( " AND ( %s OR %s ) ", $wpdb->prepare( "{$wpdb->posts}.post_title like '%%%s%%'", $title), mb_substr( $sql['where'], 5, mb_strlen( $sql['where'] ) ) );

の部分で、 AND ( %s OR %s ) OR ( %s OR %s ) に 変更して、「通常の検索条件」と「get_meta_sql フックの検索条件」を OR で連結すると出力されたりするでしょうか?

投稿2019/01/30 08:57

編集2019/01/30 09:01
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/01/30 09:03

今頃気がついたので、すでに解決済みかもしれないですが、回答しておきます。
east

2019/02/11 03:14

この度はご回答ありがとうございます! 提示いただきましたコードの方法で無事に思った通りに実装することができました! ちなみに解決するまでの代替案として、is_admin()を条件分岐にカスタムフィールドも検索に含めるようにしました。 //検索にカスタムフィールドも含める function cf_search_join( $join ) { global $wpdb; if(is_search() || is_admin()){ $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id '; } return $join; } add_filter('posts_join', 'cf_search_join' ); function cf_search_where( $where ) { global $pagenow, $wpdb; if(is_search() || is_admin()){ $where = preg_replace( "/(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*)/", "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where ); } return $where; } add_filter( 'posts_where', 'cf_search_where' ); function cf_search_distinct( $where ) { global $wpdb; if(is_search() || is_admin()){ return "DISTINCT"; } return $where; } add_filter( 'posts_distinct', 'cf_search_distinct' );
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問