【wordpress】でget_postsを使用し、search.phpを作る方法

スポンサーリンク

2015.10.24 | wordpress




【wordpress】でget_postsを使用し、search.phpを作る方法

query_postsに関する記事はよく見かけます。

しかし、query_postsはすでに非推奨になっていて、get_postsに関する記事が少なく困った方もたくさんいらっしゃると思います。

注 2: query_posts() はページ内のメインクエリーを書き換え、新しいクエリーのインスタンスと置き換えるために使う関数としては過度に単純化され、問題が発生しやすい方法です。非効率的で(SQL クエリを再実行します)、一部の状況では適切に実行することもできません(特にページング処理)。モダンな WordPress コードではもっと安定したメソッドを使うべきです。例えばpre_get_posts フックを使った方法などです。ひとことで言うと、query_posts() は決して使うべきではありません。

テンプレートタグ/query posts

私が、大変困りました。。

search.phpをget_postsを使用し、search.phpを作ろうとしたのですが、インターネットではなかなか見つからず大変苦労しました。

いざget_postsで作ろうとしたのですが、わからなかったのが、検索した値をどうやってget_postsに渡せばいいかということでした。

テンプレートタグ/get posts - WordPress Codex 日本語版でget_postsに渡すパラメータを調べても載っていない。 どうしよう??とう感じでした。

その後、2,3時間検索とし続けてようやくわかり、無事このサイトを作成することができました。

ということで、今回は、get_postsを使用し、search.phpを作る方法を説明したいと思います。

search.phpに書いたコード

まずは、search.phpに書いたコードです。
  
<?php
    //変数初期化
    $totalcnt = 0;
    global $post;
    //検索件数取得
    $totalcnt = $wp_query->found_posts;

    if($totalcnt==0){
        echo "検索しましたが見つかりませんでした。";
    }
    //検索文字列取得
    $serch_str = get_query_var('s');
    //パラメーターをセット
    $args = array('s' => $serch_str);
    $myposts = get_posts($args);
    // 件数文処理を行う
    foreach($myposts as $post) :setup_postdata( $post );
?>
    <p><?php echo get_the_title(); ?></p>
    <a href="<?php the_permalink(); ?>"></a>
    <p><?php $cat = get_the_category(); echo $cat[0]->name; ?></p>
<?php    
    endforeach;
    //ポストデータのリセット
    wp_reset_postdata();
?>

簡単にコードについて解説いたします。

まずは、件数を取得し、0件の場合は「検索しましたが見つかりませんでした。」を表示いたします。

  
<?php
    $totalcnt = $wp_query->found_posts;
    if($totalcnt==0){
        echo "検索しましたが見つかりませんでした。";
    }
?>

1件以上の場合は、

  
<?php
  //検索文字列取得
  $serch_str = get_query_var('s');
 $args = array('s' => $serch_str);
  $myposts = get_posts($args);
?>

get_query_var('s')で検索した値を取得して、get_postsに渡してやります。

たったこれだけでできてしまいます。驚きです!!

時間を費やして検索して調べてよかったと思う瞬間でした。

なぜ、get_postsで検索した値を渡したいかというと、ページング処理と、一画面に表示する記事の数を制御しているからです。 その辺の処理については、いずれここで記事としてまとめたいと思います。

まとめ

get_postsを使用し、search.phpを作るには
$serch_str = get_query_var('s');で検索した値をget_postsにセットするたけでOK!


いつもクリックありがとうございます

ブログランキング・にほんブログ村へ
スポンサーリンク




コメントを残す