同じようなことをやろうとしている方がいらっしゃいました。
WP-PageNaviで、ページングはできるが同じ記事が重複して表示される
akkii さんは、どんなページで行っていますか? 固定ページですか、それともトップページやアーカイブなどのページですか? 固定ページでなければ、テンプレートに書かなくても、pre_get_posts フックでできると思うのですが。どこに、どんなコードを書いたかがわかると、コメントがつけやすいかもしれません。
kjmtsh様
ご指摘ありがとうございます。
カテゴリーページにて表題の動作をと考えております。
現状では、カテゴリー用のテンプレートファイルとfunctions.phpに、
以下のフォーラムでkz様がお答えしている通りの内容を記載しています。
http://ja.forums.wordpress.org/topic/3635?replies=7
そのままちゃんと記述してあれば、ページングはともかく、一応ランダムな並びにはなると思うのですが、そうならないということは、フィルタがうまくフックしていない可能性が高いです。それ以上はコードを見なければ何も言えません。
「アーカイブ」ページということなので、pre_get_postsフックを使った別解です。元記事の、セッションを使ったものは、mt_rand()の性能が良すぎて、毎回ランダムになってしまうので、セッションIDから数字だけ抜き出して MySQL の RAND() 関数に渡すようにしてあります。
条件の部分は、お望みのページが表示されるときの条件を書いてください。$query->is_category()
でいいかもしれません。
function another_orderby_request($orderby) {
if (session_id() == '') session_start();
$session_number = preg_replace('/[^\d]/', '', session_id());
return 'RAND(' . intval($session_number) . ')';
}
add_action('pre_get_posts', 'random_display');
function random_display($query) {
if (is_admin() || !$query->is_main_query()) return;
if (条件) {
$query->set('posts_per_page', 3);
add_filter('posts_orderby_request', 'another_orderby_request');
}
}
なお、WP PageNavi は、固定ページでないところで迂闊に query_posts() みたいな関数を使うと、ページングの参照を間違うことが多いので、上のフックでメインクエリを書き換えるのがお勧めです。
kjmtsh様
ご回答頂きありがとうございます。
希望通りの動作をすることを確認いたしました。
ご親切にありがとうございました。
こちらは解決済みとさせて頂きます。