我的客户有一个 WooCommerce 在线商店,目前按时间倒序显示他的产品(大约 600 个)(最新的在前,最旧的在后)。
问题是旧产品没有销售,因为它们总是位于页面底部,而他的客户很少滚动到(非常长的 600 个产品!)页面底部。
不幸的是,客户不准备将产品分成类别或分成单独的页面。他还反对每次显示商店页面时都会进行随机产品排序。
但是他同意以下内容:
- 始终在页面顶部显示最新产品(我们已使用 post_meta“_product_new”标记这些产品);
- 将剩余产品分成两个 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' );
}
但我不知道如何。
这就是我需要发生的事情:
block 1:获取带有 post_meta '_product_new' 的所有产品;
block 2:获取所有其他产品并按时间倒序对它们进行排序(最新的在前,最旧的在后);
从中间分割 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/