我想按库存状态(缺货在列表末尾)和价格(从最低价开始)在存档页面上订购产品。 现在,将菜单顺序设置为默认,并使用以下代码:
add_action( 'woocommerce_product_query', 'sort_by_stock_status', 999 );
function sort_by_stock_status( $query ) {
if ( is_admin() ) return;
$query->set( 'meta_key', '_stock_status' );
$query->set( 'orderby', array( 'meta_value' => 'ASC' ) );
}
这使我能够显示按库存状态订购的产品。
我正尝试编辑代码,因此它将按库存和价格排序...没有运气 这是我尝试过的:
add_action( 'woocommerce_product_query', 'sort_by_stock_status_and_menu_order', 999 );
function sort_by_stock_status_and_menu_order( $query ) {
if ( is_admin() ) return;
$query->set( 'meta_key', '_stock_status' );
$query->set( 'orderby', array( 'meta_value' => 'ASC', 'menu_order' => 'ASC' ) );
}
如果我将菜单设置为“按价格订购”,我会看到产品仅按价格库存和缺货一起订购... 有人可以帮我吗?也许它已经在您的某些网站中实现了...))
答案 0 :(得分:0)
您距离很近...您需要对代码进行一些更改,以仅使用一个字符串而不是数组(每个参数在此唯一字符串中用空格分隔)来获取多个“ orderby”参数 >:
add_action( 'woocommerce_product_query', 'sort_by_stock_status_and_menu_order', 999 );
function sort_by_stock_status_and_menu_order( $query ) {
if ( is_admin() ) return;
$query->set( 'meta_key', '_stock_status' );
$query->set( 'orderby', 'meta_value menu_order' );
// $query->set( 'order', 'ASC' ); // <== 'order' argument is already "ASC" by default
}
默认情况下,“ order”查询参数已为ASC,因此无需更改它。
代码进入活动子主题(或活动主题)的functions.php文件中。经过测试并可以正常工作。