在更改过滤器时清除或重置 wordpress 帖子分页
Posted
技术标签:
【中文标题】在更改过滤器时清除或重置 wordpress 帖子分页【英文标题】:Clear or reset the wordpress posts pagination while changing filters 【发布时间】:2015-10-06 11:24:10 【问题描述】:我认为这很简单,但我不明白。 这是我的过滤器:
<form class='post-filters'>
<select name="filter">
<?php
$filter_options = array(
'houses' => 'Houses',
'hotels' => 'Hotels',
);
foreach( $filter_options as $value => $label )
echo "<option ".selected( $_GET['filter'], $value )." value='$value'>$label</option>";
?>
</select>
<input type='submit' value='Filter!'>
</form>
将过滤器应用于wordpress查询的相关PHP:
<?php
global $destinations;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$destinations = new WP_Query([
'paged' => $paged,
'location' => $location,
'category_name' => urldecode(get_query_var('filter')),
'posts_per_page' => 6
]);
?>
如果我确实选择了我的“过滤器”并且结果有六个以上的条目,我使用next_posts_link()
来查看接下来的六个结果。现在的问题是,如果我在第 2 页或第 3 页,而另一个过滤器的数量少于例如6 个条目,我在更改过滤器时将看不到任何结果。
如何在更改过滤器时清除 get 变量 (/page/2/)?
例子:
category/subcategory/subsubcategory/page/3/?filter=houses
现在我选择“过滤”酒店
category/subcategory/subsubcategory/page/3/?filter=hotels
并且“/page/3”不会被清除。所以有些帖子我看不到。
【问题讨论】:
将表单的action
设置为帖子的根 URL(过滤结果的第一页)
好点,我错过了。如何使用 Wordpress 方法获取当前 URL?我目前正在尝试remove_query_arg()
和home_url( $wp->request )
你能分享一个完整的示例网址吗?
@rnevius,我添加了一个例子!
【参考方案1】:
这里已经解决了: https://wordpress.stackexchange.com/a/264266
function get_nopaging_url()
$current_url = $_SERVER[REQUEST_URI];
$pattern = '/page\\/[0-9]+\\//i';
$nopaging_url = preg_replace($pattern, '', $current_url);
return $nopaging_url;
您可以使用此功能通过过滤器删除网址中的分页。
查看示例:
<a href="<?php echo get_nopaging_url(); ?>?filter=houses">
【讨论】:
以上是关于在更改过滤器时清除或重置 wordpress 帖子分页的主要内容,如果未能解决你的问题,请参考以下文章
mysql:从 10k wordpress 帖子中清除垃圾,但保留相关内容
在 Wordpress 中使用自定义帖子类型时无法在循环中过滤类别