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

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

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

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

検索

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

Q&A

解決済

2回答

1095閲覧

Wordpressの検索結果で検索語句部分を概要的に表示したい

mitsuokax

総合スコア12

WordPress

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

検索

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

0グッド

0クリップ

投稿2020/01/25 05:27

前提・実現したいこと

Wordpressの検索結果のカスタマイズを行っています。
検索結果の画面で「ページのタイトル」「検索語句の含まれる部分の文章」を表示したいです。
(↓画面はGoogleの検索結果ですが、黄色の丸部分が検索語句が表示されるイメージです)
イメージ説明

ソース

<?php if (have_posts()) : while ( have_posts() ) : the_post(); ?> <article <?php post_class();?>> <div class="post_links"> <h3 class="title"><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"> <?php the_title(); ?></a></h3> <p><?php the_content(); ?></p> </div> </article> <?php //endforeach; endwhile; endif; ?>

試したこと

<?php the_content(); ?>だと全部が表示されてしまうし、 <?php the_excerpt(); ?>だとページが長い場合に検索語句がページ末尾に含まれていると表示されません。

プラグインの利用やfunction.php、search.phpを書き換えるなど、どんな方法でもいいのですが、
解決できるドキュメントが見つけられなかったため、質問させていただきました。

ご教示いただけると幸いです。

環境

Wordpress 5.3.2

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

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

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

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

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

guest

回答2

0

ぱっと思いつくやり方だけ提示します。
0. get_the_content()でコンテンツ内容を変数に読み込む
0. HTMLと改行を削除する(HTMLの削除はstrip_tags()で)
0. 検索キーを捜して<strong></strong>で囲う
0. echoで出力

【get_the_content – WordPress私的マニュアル】
https://elearn.jp/wpman/function/get_the_content.html

【PHP: strip_tags - Manual】
https://www.php.net/manual/ja/function.strip-tags.php

投稿2020/01/25 05:46

kei344

総合スコア69364

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

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

mitsuokax

2020/01/25 06:34

kei344 さん、早速ご回答ありがとうございます。 すみません、私の質問の仕方が良くなかった(要件が足りていなかった)のですが、本文のテキストがすべて出力されるのではなく、例えば検索結果の制限を400文字にしておき、その400文字の文章の中に語句が含まれる表示が望ましいです。 教えていただいた get_the_content() で仮に実装するなら、こんな感じでしょうか… 1.get_the_content() でコンテンツ内容を $honbun に読み込みHTML&改行を削除 2.検索語句で$honbunを分割して$arrayhonbunに格納 3.mb_strlen('検索語句', 'UTF-8'); で文字数を数えて400から引く…仮にn文字とする 4.$arrayhonbun(1)の末尾をn/2文字取得  検索語句  $arrayhonbun(2)の行頭 をn/2文字取得  これらを結合 ただ、検索語句がページ最初や最後にあった場合、1ページに頻出した場合など考えると処理が煩雑になってしまうので、今回は別の方法を提案させていただくことにします。 ##Highlight Search Termsプラグインを使用すれば、飛び先でハイライトされるからいいのでは 等 ## https://wordpress.org/plugins/highlight-search-terms/ せっかくご回答いただいたのに、申し訳ありません。 今後の参考とさせていただきます。
kei344

2020/01/25 08:32

To: mitsuokaxさん > 提案 私に提案してどうするのでしょう・・・。 ひとまず自己解決で「解決済み」にされてはいかがでしょう。 【#質問をした後に自己解決してしまった|teratail(テラテイル)】 https://teratail.com/help#resolve-myself
mitsuokax

2020/01/27 01:00

kei344 さんへの提案ではなかったのですが、文脈的に分かりづらかったようで申し訳ありません。 自己解決扱いにさせていただきます。
guest

0

自己解決

工数の都合から、今回は別の方法で検索結果をわかりやすくすることにしました。

Highlight Search Termsプラグイン
https://wordpress.org/plugins/highlight-search-terms/

検索結果一覧ページでの検索語句の全てのハイライトを
各ページごと概要的に表示できるのが理想だったのですが、
ページ遷移後にも検索語句がハイライトされるので、
わかりやすさという点ではいいかなと……。

質問内容と解決方法が異なってしまったのですが、ひとまず解決済みとさせていただきます。

投稿2020/01/27 01:17

mitsuokax

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問