使用分页的自定义查询变量过滤器问题

时间:2018-03-23 作者:Gabriel Souza

我有多个自定义查询变量,可以使用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>
}

1 个回复
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 选项

结束

相关推荐

如何用函数更改主题文件中变量的值。php Wordpress?

我想更改主题中变量的值。我不想在此文件中编辑,因为更新主题后,它将丢失。所以,我想在函数中更新这个变量的值。php。在里面post-simple.php 文件:<p class=\"from_the_blog_excerpt small-font show-next\"> <?php $excerpt = get_the_excerpt(); echo flatsome_string_limit_words( $excerpt,