如何将自定义排序应用于WooCommerce产品循环

时间:2017-12-05 14:37:56

标签: php mysql wordpress woocommerce

我的客户有一个WooCommerce在线商店,目前以反向时间顺序显示他的产品(约600)(最新的,最后的最后一个)。

问题是旧产品不销售,因为它们总是位于页面底部,而且他的客户很少滚动到(非常长的600产品!)页面的底部。

不幸的是,客户不准备将产品分成不同的类别或分成不同的页面。每次显示商店页面时,他也会反对随机产品类别。

然而,他已同意以下内容:

  1. 始终在页面顶部显示最新产品(我们已使用post_meta'_product_new'标记这些产品);
  2. 将REMAINING产品分成两个区块(最旧的50%和最新的50%)并根据当前月份交替显示这些区块 - 即使是最早的50%先阻塞,最近几个月的50%阻止。
  3. 重要的是post_meta标记的产品始终位于页面顶部。

    我认为应该可以使用'pre_get_post'钩子来应用自定义产品排序:

    add_action( 'pre_get_posts', 'custom_vtp_shop_order' );
    
    function custom_vtp_shop_order($q){
        if ( ! $q->is_main_query() ) return;
        if (! is_admin() && (is_shop() || is_archive) ) {
    
            ...do the magic here...
    
        }
    
        remove_action( 'pre_get_posts', 'custom_vtp_shop_order' );
    }
    

    但我不确定如何。

    这就是我需要发生的事情:

    1. 第1组:使用post_meta'_product_new'获取所有产品;

    2. 第2组:获取所有其他产品并按相反的时间顺序排序(最新的,最后的最后一个);

    3. 在中间拆分块2,创建一个Block 3和Block 4;

    4. 4A。偶数个月(2月,4月,6月等)在第4区块3区块1下订购我的产品;

      4b中。奇数月份(1月,3月,5月等)在第3区块4区块1下订购我的产品。

      提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

听起来你需要使用WP_Query进行三次单独的查询。

1st - products, filtered by '_product_new', sorted newest to oldest
2nd - products, sorted newest to oldest, limit to half of posts
3rd - products, sorted oldest to newest, limit to half of posts.

您很可能不得不重新编写archive-product.php。我认为这将是最简单的方法。代码将非常广泛,但我无法想到你能做到这一点的任何其他方式。