wordpress - 在商店页面中首先显示特色产品,最后显示缺货产品
问题描述
我需要在商店页面顶部显示特色产品,还需要在列表底部显示缺货产品。
我可以使用以下代码在底部制作缺货产品,但它会重新订购特色产品。
add_action( 'pre_get_posts', function ( $q ) {
if ( is_shop() // Target only front end
&& $q->is_main_query() // Only target the main query
&& $q->is_post_type_archive() // Change to suite your needs
) {
$q->set( 'meta_key', '_stock_status' );
$q->set( 'orderby', 'meta_value' );
$q->set( 'order', 'ASC' );
}
}, PHP_INT_MAX );
有没有一种方法可以实现两者?
请帮助我。
谢谢。
解决方案
回答这个问题已经晚了,也许其他人需要:
add_filter('posts_clauses', 'custom_order_by_stock_status', 10, 2);
function custom_order_by_stock_status($posts_clauses, WP_Query $query) {
global $wpdb;
if ( $query->is_main_query() && (is_shop() || is_product_taxonomy()) ) {
$featured_ids = wc_get_featured_product_ids();
$posts_clauses['join'] .= " LEFT JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '') ";
$posts_clauses['orderby'] = " if($wpdb->posts.ID in (0".(implode(",", $featured_ids))."), 0, 1), istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
}
return $posts_clauses;
}
推荐阅读
- materialize - 有没有materialize-css的webcomponent版本
- neo4j - 在 Neo4j 中将属性列表映射到链表(时间线)
- post - Html.BeginForm 不发布
- javascript - 在javascript中将列表中的单词与句子中的单词匹配的最佳方法是什么?
- google-apps-script - 使用 Apps 脚本在 Google 表格中将非连续单元格从一列复制到另一列
- react-admin - DateInput 为 allowEmpty 输入生成空字符串
- python - 错误:permission_manager_qt.cpp(82) 不支持的权限类型:13
- azure - Azure Web App 是否支持配置文件中的字符串/令牌替换?
- python - 如何将像素值替换为张量流操作?
- javascript - 如何在fullCalendar中禁用事件跨度到另一天?