詰まった話 wp 検索結果ページ構築
WordPress カスタムフィールド検索対象 検索結果にハイライト前後3行の案件がありました。
見事に詰まりました。
すごくすごく詰まりました。
もう詰まりたくないので、みんなに周知しようと思いました。
神様稲葉様にアドバイス頂き解決できました。ありがとうございました。
検索結果ページにカスタムフィールの値を取得る箇所は割愛して。。。
やる事①
mb_substrの引数でバイト数を調整すると、前後が表示されます。
search.php
$searchPost_contents = strip_tags($searchPost_contents);
$searchPost_contents = strip_shortcodes($searchPost_contents);
if ( strpos($searchPost_contents, $s) ):
$searchPost_contents = mb_strstr($searchPost_contents, $s);
endif;
$text_length = 200;
if(mb_strlen($searchPost_contents, "utf-8") > $text_length):
$searchPost_contents = mb_substr($searchPost_contents, 100, $text_length, "utf-8");
$searchPost_contents .= '...';
やる事②
the_titleやthe_contentには下記を記入
functions.php
function wps_highlight_results($text) {
if(is_search()){
$sr = get_query_var('s');
$keys = explode(" ",$sr);
$text = preg_replace('/('.implode('|', $keys) .')/iu', ''.$sr.'', $text);
}
return $text;
}
add_filter('the_title', 'wps_highlight_results');
add_filter('the_content', 'wps_highlight_results');
search.php
やる事③
カスタムフィールドには下記を記入
functions.php
function search_highlight($text, $insert, $num){
if(is_search()){
$sr = get_query_var('s');
$keys = explode(" ",$sr);
$text = preg_replace('/('.implode('|', $keys) .')/iu', ''.$sr.'', $text);
return $text;
}
}
search.php
<?php
$search_word = esc_html($s, 1); // 検索文字取得
echo search_highlight($searchPost_contents, $search_word, 3);
?>
文字列を取得して、functions.phpで作った関数に引数を入れて、対応すると出来上がり。
んー。わかりにくいと思いますが、こんな感じです