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

标签 php mysql wordpress woocommerce

我的客户有一个 WooCommerce 在线商店,目前按时间倒序显示他的产品(大约 600 个)(最新的在前,最旧的在后)。

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

不幸的是,客户不准备将产品分成类别或分成单独的页面。他还反对每次显示商店页面时都会进行随机产品排序。

但是他同意以下内容:

  1. 始终在页面顶部显示最新产品(我们已使用 post_meta“_product_new”标记这些产品);
  2. 将剩余产品分成两个 block (最旧的 50% 和最新的 50%),并根据当月交替显示这些 block - 偶数月最旧的 50% block 在前,奇数月最新的 50% block 在前。<

重要的是,post_meta 标记的产品始终位于页面顶部。

我认为应该可以使用“pre_get_post” Hook 应用自定义产品排序:

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. block 1:获取带有 post_meta '_product_new' 的所有产品;

  2. block 2:获取所有其他产品并按时间倒序对它们进行排序(最新的在前,最旧的在后);

  3. 从中间分割 block 2,创建 block 3 和 block 4;

4a。在偶数月(二月、四月、六月等)按区 block 1、区 block 3、区 block 4 订购我的产品;

4b。在奇数月份(一月、三月、五月等)按区 block 1、区 block 4、区 block 3 订购我的产品。

预先感谢您的帮助!

最佳答案

听起来您将需要使用 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。我认为这将是最简单的方法。该代码将非常广泛,但我想不出任何其他方法可以正确地执行此操作。

关于php - 如何将自定义排序应用于 WooCommerce 产品循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47656181/

相关文章:

php - 用 php 回显 javascript 是不好的做法吗

php - 在 PHP 中从 Redis 中删除所有键

RaspberryPi 3 中的 Mysql 和 phpmyadmin 安装

php - Wordpress 在相同配置上显示错误的时间

php - 错误 310 (net::ERR_TOO_MANY_REDIRECTS):重定向过多。为 Facebook 使用 PHP SDK

mysql - Slick - MySQL 语法错误

mysql - G-WAN 和持久 MySQL 连接

php - 在 woocommerce 产品页面的价格后添加自定义文本

wordpress - WordPress:在url中包含语言变量

php - WooCommerce Hook 中的产品变体和父变量产品对象