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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

PHP

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

587閲覧

WordPressサイト内検索でAlgoliaの検索対象にカスタムフィールドを入れたい

munokura

総合スコア109

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

PHP

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/06/05 04:26

編集2019/06/10 10:45

前提・実現したいこと

レンタルサーバーでWordPress5.2.1を使用しています。
こちらでAlgoliaを使用したサイト内検索をしたいと考えています。
Advanced Custom Fields バージョン 5.8.1 を使用しています。
https://ja.wordpress.org/plugins/advanced-custom-fields/

発生している問題・エラーメッセージ

エラーメッセージは出ていません。
Algolia for WordPress プラグインを入れ、API他の必要項目を入力し、インデックスを完了しました。
Search results は Use Algolia in the backend にチェックを入れています。

しかし、検索してみるとカスタムフィールドが検索対象になっていないようです。
検索対象はタイトルと記事内容(文章)のみになっているようです。

検索(インデックス)対象にカスタムフィールドを含めたいのですが、方法が分かりません。

試したこと

1.Algolia プラグインを入れた。
バージョン 3.0.2
https://ja.wordpress.org/plugins/wp-algolia/

2.テーマ内の function.php に下記のページに掲載されているコードを入れた。
https://community.algolia.com/wordpress/advanced-custom-fields.html

PHP

1add_filter( 'algolia_post_shared_attributes', 'my_post_attributes', 10, 2 ); 2add_filter( 'algolia_searchable_post_shared_attributes', 'my_post_attributes', 10, 2 ); 3 4/** 5 * @param array $attributes 6 * @param WP_Post $post 7 * 8 * @return array 9 */ 10function my_post_attributes( array $attributes, WP_Post $post ) { 11 12 if ( 'post' !== $post->post_type ) { 13 // We only want to add an attribute for the 'speaker' post type. 14 // Here the post isn't a 'speaker', so we return the attributes unaltered. 15 return $attributes; 16 } 17 18 // Get the field value with the 'get_field' method and assign it to the attributes array. 19 // @see https://www.advancedcustomfields.com/resources/get_field/ 20 $attributes['help'] = get_field( 'help', $post->ID ); 21 22 // Always return the value we are filtering. 23 return $attributes; 24}

PHP

1add_filter( 'algolia_posts_post_index_settings', 'my_posts_index_settings' ); 2// We could also have used a more general hook 'algolia_posts_index_settings', 3// but in that case we would have needed to add a check on the post type 4// to ensure we only adjust settings for the 'speaker' post_type. 5 6/** 7 * @param array $settings 8 * 9 * @return array 10 */ 11function my_posts_index_settings( array $settings ) { 12 13 // Make Algolia search into the 'bio' field when searching for results. 14 // Using ordered instead of unordered would make words matching in the beginning of the attribute 15 // make the record score higher. 16 // @see https://www.algolia.com/doc/api-client/ruby/parameters#attributestoindex 17 $settings['attributesToIndex'][] = 'unordered(help)'; 18 19 // Make Algolia return a pre-computed snippet of 50 chars as part of the result set. 20 // @see https://www.algolia.com/doc/api-client/ruby/parameters#attributestohighlight 21 $settings['attributesToSnippet'][] = 'help:50'; 22 23 // Always return the value we are filtering. 24 return $settings; 25}

3.Algolia プラグインで「Re-index」を行った。

補足情報(FW/ツールのバージョンなど)

サーバーの仕様
Apache 2.2
PHP 5.6.40
MySQL 5.5.62

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

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

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

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

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

YukiYamashina

2019/06/10 05:32 編集

質問に記載されているコードは 'speaker' という投稿タイプでの 'bio' というカスタムフィールドを検索対象とするコードですが、ご自身が検索対象としたいものもまったく同じということでしょうか?
munokura

2019/06/10 09:47

いえ、異なります。 検索対象にしたいカスタムフィールドの名前は下記になります。 furigana desc author website download license descpage filename help other
munokura

2019/06/10 10:08

試しにbioをhelpに置き換え、「Re-index」しましたが、検索結果に変化はありませんでした。
YukiYamashina

2019/06/10 10:14

speaker の部分はそのままですか?もし投稿タイプがカスタム投稿タイプではなくデフォルトの投稿であれば、speaker を post にしなければいけません。
munokura

2019/06/10 10:22

先程はtextareaに書き換えて試みてみました。 再度postに書き換えてみましたが、変化はありませんでした。 質門元のソースを現状に更新いたしました。
YukiYamashina

2019/06/10 10:32

先ほどまであった add_filter( 'algolia_post_shared_attributes', 'my_post_attributes', 10, 2 ); が含まれているコードが「試したこと」のコードから消えていますが、お手元のコードからも削除されたということでしょうか?
munokura

2019/06/10 10:38 編集

あれ?確かに無いです、バックアップファイルから戻して、再修正しようとしたのですが、今日の変更を加える前のファイルにもその記述がないです…。 リンク元からコピペしなおしてから、ご指摘の箇所を変更してみます。
munokura

2019/06/10 10:43 編集

「Re-index」すると、下記のエラーが出てしまいます。 対象データが大きすぎるということでしょうか? -- An error occurred: Record at the position 38 objectID=1038-0 is too big size=21701 bytes. Contact us if you need an extended quotaサイトに技術的な問題が発生しています。
munokura

2019/06/10 11:02

helpが大きすぎたかもしれないと考え、最も小さいサイズのフィールドを指定したのですが、同じエラーが出てしまいました。 これはindexを繰り返したせいで、月間の上限に達したことで起こっているのでしょうか? 少なくとも、記述方法が正しくなって、indexがされたと思いますが…
YukiYamashina

2019/06/10 11:25

現在の状況的には「algolia の検索対象にカスタムフィールドを含めたい」から「algolia で レコードの size limit を超えてしまう」という問題に変わっていますので、別の質問を立ててそちらで回答を求められてはいかがでしょうか?
munokura

2019/06/10 11:30

そうですね…では、本件を一度解決にしたく、YukiYamashina様にベストアンサーを付けたいです。 記述法の回答を付けていただけませんか?
guest

回答2

0

ベストアンサー

Advanced Custom Fields integration with Algolia Search に、カスタム投稿タイプ speaker のカスタムフィールド bio を検索対象とする例が載っています。カスタム投稿タイプではなくデフォルトの投稿で、例えばカスタムフィールド help を検索対象とする場合は、以下のようにコードを書き換えてください。

php

1<?php 2 3add_filter( 'algolia_post_shared_attributes', 'my_post_attributes', 10, 2 ); 4add_filter( 'algolia_searchable_post_shared_attributes', 'my_post_attributes', 10, 2 ); 5 6/** 7 * @param array $attributes 8 * @param WP_Post $post 9 * 10 * @return array 11 */ 12function my_post_attributes( array $attributes, WP_Post $post ) { 13 // 投稿タイプを 'post' にする. 14 if ( 'post' !== $post->post_type ) { 15 return $attributes; 16 } 17 18 // 検索対象のカスタムフィールドが help の場合の記述. 19 $attributes['help'] = get_field( 'help', $post->ID ); 20 21 return $attributes; 22} 23 24// algolia_posts_${post_type}_index_settings となるようにする. 25add_filter( 'algolia_posts_post_index_settings', 'my_posts_index_settings' ); 26 27/** 28 * @param array $settings 29 * 30 * @return array 31 */ 32function my_posts_index_settings( array $settings ) { 33 // 検索対象のカスタムフィールドが help の場合の記述. 34 $settings['attributesToIndex'][] = 'unordered(help)'; 35 36 // 検索対象のカスタムフィールドが help の場合の記述. 37 $settings['attributesToSnippet'][] = 'help:50'; 38 39 return $settings; 40}

投稿2019/06/10 11:54

YukiYamashina

総合スコア1011

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

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

0

Algolia communityAlgolia Client を使った例として Advanced Custom Fields integration with Algolia Search というドキュメントがあり、Advanced Custom Fields の場合の例がありますね。

algolia_post_shared_attributesalgolia_searchable_post_shared_attributes フックを使って、カスタムフィールドの内容を追加する必要があるようです。

投稿2019/06/05 05:28

CHERRY

総合スコア25171

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

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

munokura

2019/06/05 06:20

Advanced Custom Fields integration with Algolia Search は拝見していたのですが、示されているコードをどのように使用すれば良いのかが理解できませんでした。 functions.php に追加して、インデックスしなおしましたが、検索結果に変化は見られませんでした。
CHERRY

2019/06/06 00:12 編集

具体的にどの様なコードを追加して、どの様な結果になったのかを質問に追記していただけないでしょうか?  エラーが出ているのであれば、Webサーバーのログに記録されているエラーメッセージも記載してください。
munokura

2019/06/07 01:34 編集

エラーは出ていません。 質問元の「試したこと」を修正し、コードを貼りました。 検索結果はプラグインを入れる前と同じ(タイトルと記事の内容のみが検索対象となった結果)になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問