web-dev-qa-db-ja.com

ページ付け:1ページに戻るフォーム上の 'POST'アクションの後に/ page/x /を削除する方法

私は次のような問い合わせをしていますが、それは「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>
1
mike23

あなたのフォームはactionパラメータで指定されたURLにポストバックするでしょう、またはあなたがそれを指定しないなら同じURLにポストバックします。あなたは/books/page/8/から始めるので、あなたのactionパラメータが空の場合、結果のURLも/books/page/8/になります。 actionパラメーターに/books/を入力するだけで、うまくいきます。

2
Jan Fabry