我有多个自定义查询变量,可以使用pre\\u get\\u posts挂钩和add\\u query\\u arg函数过滤产品。
除了分页之外,所有都可以正常工作,当我导航到第5页(例如)而不进行筛选,然后选择一个过滤器时,如果该过滤器的产品没有5页,它将不会显示任何内容。
大多数网站所做的是在选择过滤器时返回到第一页,但我不知道具体怎么做。
我有一个开始,但它当然不起作用。如果有人帮助我,我将不胜感激。
if ( in_array(get_query_var(\'brand\'), $wp_query->query_vars) ) {
get_query_var(\'paged\') = 1;
}
我如何筛选:
function custom_query_vars_filter( $custom_vars ) {
$custom_vars[] = \'marca\';
return $custom_vars;
}
add_filter( \'query_vars\', \'custom_query_vars_filter\' );
function customize_main_query( $query ) {
if ( !is_admin() && $query->is_main_query() ) {
if ( is_product_category() ) {
$query->set(\'posts_per_page\', 3);
$marca= get_query_var(\'marca\');
$tax_query = array(\'relation\' => \'AND\');
if ( $marca ) {
$tax_query[] = array(
\'taxonomy\' => \'brands\',
\'field\' => \'slug\',
\'terms\' => $marca
);
}
$query->set( \'tax_query\', $tax_query );
}
}
}
add_action( \'pre_get_posts\', \'customize_main_query\' );
类别存档页
$marca_arg = isset($marca) ? array($marca) : [];
foreach ($marcas_terms as $marca_term) {
<div class="filtro-item">
<a href="<?php echo (in_array($marca_term->slug, $marca_arg)) ?
esc_url(remove_query_arg(\'marca\')) : esc_url(add_query_arg(\'marca\',
"$marca_term->slug")); ?>"><span class="check-
filtro"></span><?php echo $marca_term->name; ?></a>
</div>
}
SO网友:Tom J Nowell
问题是URL中的分页参数:
<a href="<?php echo (in_array($marca_term->slug, $marca_arg)) ?
esc_url(remove_query_arg(\'marca\')) : esc_url(add_query_arg(\'marca\',
"$marca_term->slug")); ?>">
这里我们看到添加和删除了marca术语,但pagination参数不是,但这是URL的一部分,不是参数
Instead, why not use the taxonomy archives and get_term_link
? 如果marca
参数是否存在?
您可以消除pre_get_posts
更改将不再需要查询变量分页问题将消失,您可以使用taxonomy-brands.php
在您的主题中,您已经在example.com/brands/*term_name*
只需等待一个自定义模板,它们已经在您的站点上,未使用。为什么要重建已经存在的东西?如果您对URL不感兴趣,可以通过rewrite
选项