詰まった話 wp 検索結果ページ構築

詰まった話 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で作った関数に引数を入れて、対応すると出来上がり。
んー。わかりにくいと思いますが、こんな感じです

SNSシェア

WP TECH WordPress技術専門 Tips

コーポレートサイトへ

WP TECH WordPress技術専門 Tips

採用サイトへ