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

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

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

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

PHP

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

2527閲覧

WordPressのフリーワード検索で特定のカスタムフィールドのみ除外したい

Travis

総合スコア13

WordPress

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

PHP

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2017/11/27 10:44

編集2017/11/29 01:16

###実現したいこと
WordPressのフリーワード検索で、特定のカスタム投稿フィールド(ACFで作成)の値のみ検索対象から除外したいです。

###参考のソース
https://adambalee.com/search-wordpress-by-custom-fields-without-a-plugin/
上記のURLを参考に

function cf_search_join($join) { global $wpdb; if (is_search()) { $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 $wpdb; if (is_search()) { $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()) { return "DISTINCT"; } return $where; } add_filter('posts_distinct', 'cf_search_distinct');

で試した結果、当然カスタム投稿フィールドの値を検索対象として検索結果に表示はできたのですが、ここから特定のカスタム投稿フィールドの値のみ検索対象外としたいのです。

上記をベースにした場合には、どのような記述をすれば特定のカスタム投稿フィールドを除外できますでしょうか。

お手隙の時にでもご教示いただければと存じます。
何卒よろしくお願いいたします。

###補足情報
http://wpcj.net/1363
上記URLの方法で試した結果、検索対象の除外はうまくいくのですが、あるはずのキーワードで検索しても出てこなかったりするバグが私の環境では発生いたしました。
そのバグには規則・法則性はなく、テキストなど文章の一部までは検索すると表示されるのにそれ以上の文字まで範囲に含めると検索結果として表示されないなどです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/12/03 13:16

検索対象外としたい「特定のカスタム投稿フィールド」はどのように特定されるものでしょうか。値に特定の文字列が入っているのか、それとも特定のフィールド名の値ですか?
Travis

2017/12/04 01:54

ご返信遅くなってしまい申し訳ございません。ご指摘の通り説明不足でした。検索対象外にしたいのは後者の「特定のフィールド名」です。
guest

回答1

0

ベストアンサー

検索対象外にしたいのは「特定のフィールド名」

カスタムフィールドを作成して試すところまではやっていませんが、途中まで試してみた感じでは、where句にpostmeta.meta_key NOT LIKE '除外フィールド名'を追加すればいけそうな気がします。
以下の一文をcf_search_where関数に追加するイメージです。

PHP

1$where .= " AND (" .$wpdb->postmeta. ".meta_key NOT LIKE 'teratail102254')";

「Query Monitor」というプラグインを追加すると、WordPress動作時に実際に実行されているSQL文を見ることができるので、よろしければ使ってみてください。
https://ja.wordpress.org/plugins/query-monitor/

投稿2017/12/04 12:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問