検索対象にカスタムタクソノミーの文字列も含めたい wp_pagenavi対応

前記事の「検索対象にカスタムタクソノミーの文字列も含めたい」で作成した検索が、ページネーション用に使用しているプラグイン「wp_pagenavi」に対応していなかった。

原因を探ってみる。

query_posts()にページ送り用の情報が送られていないのが原因のようだ。

wp_pagenaviを利用している普通の検索だと、$query_stringにある
s=’検索キーワード’
paged=ページ番号
という情報が自動的に適用される。

検索をカスタマイズしてしまったので、「paged」の情報を追加してquery_posts()を行う必要がある。

修正したのは以下の部分。


//検索結果が0でなければ、query_postsでヒットした投稿のIDを指定して抽出する。

if (!empty($objResult)){
	
	$id_array = '';
	foreach ($objResult as $key => $value) {
	//	echo $value->post_title . ':' . $value->name .  '<br />';
		$id_array[$i] = $value->ID;
		$i++;
	}

	$arg = array(
		'post__in'=>$id_array,
		'post_status'=>'publish',
		'post_type'=>'対象のカスタム投稿タイプ' //対象のカスタム投稿タイプ
	);

	//$query_stringを分解して、wp_pagenaviの情報を配列に追加
	if(!empty($query_string)){
		$query_string_array = explode('&',$query_string);
		foreach ($query_string_array as $q_key => $q_value) {
			$temp = explode('=',$q_value);
			$key_str = $temp[0];
			if ($temp[0] == 'paged'){
				$numb=(int)$temp[1];
				if (is_int($numb)) $arg[$key_str] = $numb ;
			}
		}
	}

	
	query_posts( $arg );

}

$query_stringを分解して、pagedが含まれていれば配列に格納する。
その際に変なもんが入らないよう、整数型にキャストしてチェックし、数字以外が追加されないようにする。

これでページ送りも確認がとれた。

ただ、キーワードを複数にした場合、期待通りの動作をしないことがある。
これは自身の稚拙なSQLに原因があるのだと思う。
あれこれ試してみたが、どうもうまく行かないので、こんど詳しい方にアドバイスを仰ごう。

追記

query_posts()のパラメータ「paged」は、wp_pagenaviの利用に限らず存在してた。

query_posts()のパラメータ指定に、post_statusがpublishであることを付け加えた。
これが無いと非公開の投稿も表示されてしまう。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする