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

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

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

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

WordPress

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

PHP

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

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

検索

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

Q&A

解決済

2回答

1731閲覧

Wordpressでカスタムフィールドを検索対象に含めることができない

arutoi

総合スコア18

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

WordPress

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

PHP

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

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

検索

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

0グッド

0クリップ

投稿2021/07/05 08:55

編集2021/07/06 04:32

##困っていること
Wordpressのfunctions.phpに以下のようにカスタムフィールド を検索対象に含めるためのコードを追加したのですが、うまく動きません。
デフォルトの検索のクエリパラメータ付きのURLはexample.com/?q=query_keyword となると思うのですが、 
example.com/?s=query_keyword となると思うのですが、
Search & filter proというプラグインを使用しているため、検索ページで検索するとexample.com/?_sf_s=query_keyword example.com/search/?_sf_s=query_keywordというURLになります。

##期待する動作
カスタムフィールド に"hogehoge"などのキーワードを入力し、検索して、検索結果に表示したい

##試したこと
search & fiter Proのサポートに連絡すると、検索対象の幅をカスタムフィールド に広げるにはRelevanssiというプラグインを使用してください、ということでそちらも試しましたが、PHPのバージョンがサポート外となっておりそちらの方法は使えませんでした。

##環境
PHP (5.6.40)
Wordpress 5.7.2

PHP

1<?php 2//set custom fields to search target 3function custom_search($search, $wp_query) { 4 global $wpdb; 5 6 //検索対象ページ以外だったら終了 7 if (!$wp_query->is_search) 8 return $search; 9 if (!isset($wp_query->query_vars)) 10 return $search; 11 12 $search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : ''); 13 if ( count($search_words) > 0 ) { 14 $search = ''; 15 $search .= "AND post_type = 'post'"; 16 foreach ( $search_words as $word ) { 17 if ( !empty($word) ) { 18 $search_word = '%' . esc_sql( $word ) . '%'; 19 $search .= " AND ( 20 {$wpdb->posts}.post_title LIKE '{$search_word}' 21 OR {$wpdb->posts}.post_content LIKE '{$search_word}' 22 OR {$wpdb->posts}.ID IN ( 23 SELECT distinct post_id 24 FROM {$wpdb->postmeta} 25 WHERE meta_value LIKE '{$search_word}' 26 ) 27 ) "; 28 29 } 30 } 31 } 32 return $search; 33} 34add_filter('posts_search','custom_search', 10, 2);

プラグインを使わずにカスタムフィールド を検索対象に含めるには、どうしたら良いでしょうか。

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

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

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

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

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

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

arutoi

2021/07/06 03:06

ありがとうございます。 PHPバージョンを上げたいのは山々なのですが、同じサーバーで動いている他のWebアプリがあるため簡単にはあげづらい状況でして・・。
guest

回答2

0

自己解決

以下の過去の同様の質問を参考に、
https://teratail.com/questions/112151

PHPバージョンをphp5.6.40から7.4.12にバージョンアップをした上で、Relevanssiというプラグインを有効にし、Search & FilterのPost Metaのタブで、+Add Conditionボタンを押下、カスタムフィールド 名 + Char + likeで設定を追加し、Relevanssiの設定で、Indexingタブの、Post typeとTaxonomyを適宜選択、Custom FieldsをVisibleに設定し、Save the optionsを押下、Build the Indexを押下で検索結果に表示されるようになりました。バージョンアップしないと機能実現できないという方向で、通しました!

また、別の対応方法として、もともと検索対象はタイトルと本文になっているので、本文に

HTML

1<p class="no-show">ここに検索対象としたいテキストを入力します</p> 2<style> 3.no-show{ 4 display:none; 5} 6</style>

と書くと、一覧ページでは抜粋excerptが表示されてしまいますが、この方法でやろうと思います。

親切な回答いただいた方々に感謝申し上げます。

投稿2021/07/07 08:09

編集2021/07/07 08:31
arutoi

総合スコア18

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

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

0

Wordpressのfunctions.phpに以下のようにカスタムフィールド を検索対象に含めるためのコードを追加したのですが、うまく動きません。

うまく動きませんとは、どのような動作や表示になるのでしょうか?
起きている状況を具体的に記載していただけないでしょうか。

× 表示されない → 例えば、「真っ白な画面になる」「Internal Server Error と表示される」「検索結果が 0件となる (管理画面で確認すると一致するのが 5件ある)」等 具体的な情報を記載して状況が伝わるようにしてください

デフォルトの検索のクエリパラメータ付きのURLはexample.com/?q=query_keyword となると思うのですが、

関数リファレンス/get_search_form

送信される唯一のパラメータは s で、現在の検索クエリの値を持ちます。しかしいろいろな形に検索クエリを変更できます。

とあるように WordPress デフォルト検索画面の QueryString は、 s=キーワード だと思います
この q= というのは出典はどこでしょうか?


「うまく動きません。」というのが、「データが有るのに検索結果が表示されない」と仮定して、質問に記載されたコードをみると

$search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : '');

と検索キーワードを取得している部分がありますが、

Search & filter proというプラグインを使用しているため、検索ページで検索するとexample.com/?_sf_s=query_keywordというURLになります。

というお使いの環境に合わせて変更するとどうなるでしょうか?

投稿2021/07/06 03:36

CHERRY

総合スコア25218

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

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

arutoi

2021/07/06 04:29

ありがとうございます。 クエリ文字列が間違えておりましたので、取り消し線を引いて修正いたしました。 また、期待する動作を追加いたしました。 $search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : ''); の部分を $search_words = explode(' ', isset($wp_query->query_vars['_sf_s']) ? $wp_query->query_vars['_sf_s'] : ''); に変更して試しましたが、検索結果に表示されませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問