よくサイトの右上やサイドバーにある、検索フォームをつくります。
検索フォームをつくる
まず、検索フォームそのものを記述するsearchform.phpを作成し、以下を記述します。
1 2 3 4 |
<form method="get" id="searchform" action="<?php bloginfo('url'); ?>"> <input type="text" name="s" id="s" placeholder="search"/> <button type="submit">検索</button> </form> |
検索結果ページをつくる
続いて、検索した後、結果が表示されるテンプレートsearch.phpを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php if (have_posts()): ?> <?php if (isset($_GET['srh']) && empty($_GET['s'])) { echo '検索キーワード未入力'; // 検索キーワードが未入力の場合のテキストを指定 } else { echo '“'.$_GET['s'] .'”の検索結果:'.$wp_query->found_posts .'件'; // 検索キーワードと該当件数を表示 } ?> <?php while(have_posts()): the_post(); ?> <a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a> <?php endwhile; ?> <?php else: ?> 検索結果は0件です。 <?php endif; ?> |
サイドバーを設置する
以下の記述で、お好きな場所に検索フォームを表示させることができます。
1 |
<?php get_search_form(); ?> |
ただ、サイドバーをウィジェットで設定している場合も多いかと思います。
ウィジェットでは通常のままだとphpを使用することができませんので、フォームを出力できません。困った。
方法としては、
①sidebar.phpで出力
②旧ウィジェットに戻して、phpを使用できるようにする
の2つです。
①sidebar.phpで出力
特に問題ないのであれば、基本的にはこちらで解決するが簡単ですしおすすめです。
sidebar.phpは以下のようになります。
1 2 3 4 |
<aside id="sidebar"> <?php dynamic_sidebar( 'side-widget' ); ?> <?php get_search_form(); ?> </aside> |
検索フォームだけはテンプレートで、他の項目はウィジェット側で管理している状態です。
②旧ウィジェットに戻して、phpを使用できるようにする
ウィジェットでphpを使えるようにしちゃえばOK!という話なのですが、wordpress5.8のアップデートで、ウィジェットもブロックエディター仕様になりました。
色々試してみたのですが、ブロックエディターでphpを使用する…というのは今のところ難しそう。。
ということで、ウィジェットでphpを使用するためには、まず旧ウィジェットに戻す作業が必要になります。
ただ、今後のアップデートで旧ウィジェットが使用できなくなる可能性もあります。
どうしても何らかの都合でsidebar.phpではできない!というときだけの対応ですかね。。
私もいまだにブロックエディターに大いに抵抗があるのですが、慣れておかないとだめですね…
以下、手順。
下記をfunctions.phpに記述して、旧ウィジェットに戻します。
1 |
add_filter( 'use_widgets_block_editor', '__return_false' ); |
そしてphpを使用できるようにします。
1 2 3 4 5 6 7 8 9 10 11 |
function widget_text_exec_php( $widget_text ) { if( strpos( $widget_text, '<' . '?' ) !== false ) { ob_start(); eval( '?>' . $widget_text ); $widget_text = ob_get_contents(); ob_end_clean(); } return $widget_text; } add_filter( 'widget_text', 'widget_text_exec_php', 99 ); add_action( 'widgets_init', 'widgetsidebar_init' ); |
使用するウィジェットは「テキスト」で、ビジュアルではなく「テキスト」タブに記述するとphpが認識されますよ。
こちら参考にさせていただきました↓
https://hirashimatakumi.com/blog/3109.html
https://open-cage.com/classic-widgets/