【问题标题】:WooCommerce filter products by rangeWooCommerce 按范围过滤产品
【发布时间】:2016-02-16 07:54:10
【问题描述】:

例如,我有两个变体,“from_year”和“until_year”,我如何在产品存档页面中按范围过滤产品。

如果调用这个url,只会得到等于变量的产品,但需要from_year >= 2005until_year <= 20015

mysite.com/?from_year=2005&until_year=2015&post_type=product

【问题讨论】:

  • 您是在问如何为链接创建 url 或如何获取术语组合?
  • 获取术语组合

标签: wordpress woocommerce


【解决方案1】:

您需要日期查询。这是date queries 上的一个很好的教程,这是date parametersWP_Query 的Codex。

您还需要过滤 query_vars 以添加您的新查询变量,并过滤 pre_get_posts 以根据您的新查询变量修改检索到的帖子。

有了所有这些参考资料,这是我应该如何完成的尝试。

// Add query vars for filtering by years
function so_33714675_add_vars($query_vars) {
    $query_vars[] = 'from_year';
    $query_vars[] = 'until_year';
    return $query_vars;
}
add_filter( 'query_vars', 'so_33714675_add_vars' );

// Filter product arvhice if query vars are present
function so_33714675_pre_get_posts($query) {
    if ( !is_admin() && is_shop() && $query->is_main_query() ) {

        $from_year = get_query_var('from_year');
        $until_year = get_query_var('until_year');

        $date_query = array();

        if( ! empty( $from_year ) ){
            $date_query['after'] = array(
                'year'      => $from_year,
            );
        } 

        if( ! empty( $until_year ) ){
            $date_query['before'] = array(
                'year'      => $until_year,
            );

        } 

        // order by date
        if( ! empty( $date_query ) ){
             set_query_var( 'orderby', 'date' );
             set_query_var( 'order', 'ASC' );

             $date_query['inclusive'] = true;
             set_query_var( 'date_query', array( $date_query ) );

        }
    }
}
add_action( 'pre_get_posts', 'so_33714675_pre_get_posts' );

请记住,这尚未经过全面测试。我 99% 肯定这是正确的方法,但它可能需要一些调整。

【讨论】:

  • 嗨,我不需要按日期范围过滤帖子,但这可能会有所帮助,谢谢。我需要按变量/属性范围过滤 woocommerce 产品。
  • 我看到您已经编辑了您的问题以使其更清楚。但现在和以前完全不同了。今后,请尽量提出最准确的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多