私は次のような問い合わせをしていますが、それは「Books」(カスタム投稿タイプ)のリストを取得することです。このリストは、「編集者」(カスタム分類法)の用語が取り込まれたドロップダウンを含む小さなフォームのページに表示されます。ユーザーが「編集者」を選択すると、ページがリロードされ、クエリは対応する「書籍」を返します。
// Taxonomy query
$tax_query = array('relation' => 'AND');
if($_POST['editor']) array_Push($tax_query,array('taxonomy' => 't_editor','terms' => array($_POST['editor']),'field' => 'slug'));
// Pagination
if($_POST['reset_pagination'] || !get_query_var('paged')){
$paged = 1;
}else if (get_query_var('paged')) {
$paged = get_query_var('paged');
}
// Query
$myquery = array(
'post_status' => 'publish',
'post_type' => 'books',
'orderby' => 'title',
'order' => 'ASC',
'tax_query' => $tax_query,
'paged' => $paged
);
「本」はたくさんあるので、ページネーションを使います。
今、問題です。私が一般的なリスト(「編集者」によってフィルタリングされていない)に載っているとしましょう、私は200の結果を持ち、ページあたり10のページ付けをします。 8ページ目までブラウズしたとしましょう。それで、私が選択したものを "Editor"でフィルタリングすることにした場合、ページはそれらの結果のみをリロードして表示します。問題は、私が8ページにいたように、私のURLに/ page/8 /が付いていることです。
私はフィルタリングが行われた後に "paged"を1にリセットする方法を発見し(フォーム上の隠された "reset_pagination"フィールドで)、フィルタリング後のページ1の結果があります/ page/8 /)は残ります。
URLから "/ page/x /"を削除するにはどうすればよいですか。
編集:これがフォームのコードです。
<form action="" method="post" id="filter">
<ol>
<li>
<?php include(TEMPLATEPATH . '/includes/forms/filter_editors.php'); ?>
</li>
<li>
<input type="hidden" name="reset_pagination" value="1"/>
<input type="submit" class="submit" value="<?php _e('Ok'); ?>" />
</li>
</ol>
あなたのフォームはaction
パラメータで指定されたURLにポストバックするでしょう、またはあなたがそれを指定しないなら同じURLにポストバックします。あなたは/books/page/8/
から始めるので、あなたのaction
パラメータが空の場合、結果のURLも/books/page/8/
になります。 action
パラメーターに/books/
を入力するだけで、うまくいきます。