分页:如何在返回到第1页的表单上执行‘POST’操作后删除/page/x/

时间:2011-05-06 作者:mike23

我有以下查询,它所做的是获取一个“书籍”列表(自定义帖子类型)。该列表显示在一个页面上,该页面也有一个小表单,下拉列表中填充了“编辑器”(自定义分类法)的术语。当用户选择“编辑器”时,它将重新加载页面,查询将返回相应的“书籍”。

// 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页。然后,如果我决定通过“编辑器”筛选我的选择,页面将重新加载并仅显示这些结果。问题是,当我在第8页时,我的URL已经附加了/page/8/。

我找到了如何在进行筛选后将“分页”重置为1(表单上有一个隐藏的“reset\\u pagination”字段),它可以工作,并且我有筛选后的第1页结果,但在URL中仍然保留分页(/页/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 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

您的表单将发回action 参数,如果未指定,则指向相同的URL。您开始于/books/page/8/, 所以如果你的action 参数为空,生成的URL也将为/books/page/8/. 只需填写action 带的参数/books/, 它应该会起作用。

结束

相关推荐

Pagination with custom loop

我的问题可能是Pagination not working with custom loop, 但有一种不同。我使用自定义循环来显示flash游戏。我想按类别在游戏页面上分页。类别php:<?php if ($cat) { $cols = 2; $rows = 4; $paged = ((\'paged\')) ? get_query_var(\'paged\') : 1; $post_per_page = $cols * $rows; // -1 s