こんにちは。最近どれだけ寝ても日中眠くてねむくて仕方がない@nyagihimeです。
今日のお題。
WordPressの検索結果にもうちょっと情報を付け加える
デフォルトの検索結果だと、検索結果がだらだらでるだけ、または出ても検索したキーワードだけって事が多いと思いますが、これをもう少し改造して、見つかった件数とか絞り込みに選んだカテゴリーやついでにタグも表示しようというものです。
はじめに。
結構強引な方法ですのでもしかしたらもうちょっといい方法があるかもしれません。
予めご了承下さい。
コードを書く
と、断りをいれたところで、早速。
search.phpの好きなところに以下のコードを書きます。といっても、タグとかを表示する部分でこの変数を使うんでなるべく上の方に書いたほうが良いと思います。
1 2 3 4 5 6 7 8 9 |
<?php $searchCat = $_GET['cat']; $searctTag = $_GET['tag']; $searchCatObj = get_term_by( 'ID', $searchCat, 'category'); $searchTagObj = get_term_by( 'slug', $searctTag, 'post_tag'); $searchCatStr = $searchCatObj->name; $searchTagStr = $searchTagObj->name; $found_cnt = $wp_query->post_count; ?> |
あとは、
表示したいところで(上記コードより下で)
1 2 3 |
<?php if ($searchCatObj) echo 'カテゴリー:'.$searchCatStr; ?> <?php if ($searchTagObj) echo 'タグ;'.$searchTagStr; ?> <?php echo $found_cnt.'件見つかりました'; ?> |
とすれば表示されます。指定しなかったものは表示されなくなります。
あとは適当にCSSとかで整形してあげればOK。
ポイントは get_term_by というタグです。ターム周りを柔軟に検索できるのでこれ1こ覚えておくとかなり色々便利なんじゃないかなーと思う今日このごろです。
書き方は、
1 |
$term = get_term_by( $field, $value, $taxonomy, $output = OBJECT, $filter = 'raw' ) |
です。この例だと取得した結果が $term に入ります。 指定したタグやカテゴリがない場合は false が返ります。
$field
検索するフィールド名です。’slug’,’name’,’ID’なんかが使えます。
次に指定する $value はどれにあたるのかを指定します。
slug,name以外は何を指定してもIDとして解釈されるようです。
$value
検索する値です。
IDなら11とか6みたいなカテゴリー(タグ)ID、slugなら登録時に指定したスラッグといった具合。
$taxonomy
タクソノミー名を指定します。
カテゴリーなら ‘category’,タグなら’post_tag’です。あと’link_category’というのも使えます。
$output
出力型を指定します。OBJECT、ARRAY_A、ARRAY_Nを指定出来ます。
省略するとOBJECTです。
$filter
フィルターを指定します。省略すると ‘raw’ が指定されます。
$outputにOBJECTを指定した場合は、以下の様な感じで取得出来ます。
term_id : ID
name : 名前
slug : スラッグ
term_group : グループID
term_taxonomy_id : タクソノミーID
taxonomy : タクソノミー名(カテゴリの場合は ‘category’ タグなら ‘post_tag’ で固定
description : 説明文
parent : 親カテゴリーのID。親がない場合(自分が親の場合)は 0 が入る
count : 投稿数
あとは、 echo $term->name とすれば名前をとれるし、IDを知りたいなら $term->IDです。
今回はURLに投げられた検索条件とかをGETで受け取って処理してます。他の方法もあるのかなぁ?
それでは,おやすみなさい。…ともいかないので仕事いってきます。
コメントする