我正在尝试通过多个元键订购产品,以便最畅销的产品首先出现,最后是缺货的产品。
我最终设法让缺货的产品参展,但卖得最多的产品没有正确订购。
我在cenario测试,5种产品,2种缺货(最后显示),其他3种都是这样订购的,第一个销量较少,第二个销量最多,最后一个。。。
$meta_query = array(\'relation\' => \'AND\');
$meta_query[] = array(
\'key\' => \'_stock_status\',
);
$meta_query[] = array(
\'key\' => \'total_sales\',
);
$orderby = array(
\'_stock_status\' => \'ASC\',
\'total_sales\' => \'DESC\',
);
$query->set( \'meta_query\', $meta_query );
$query->set( \'orderby\', $orderby );
SO网友:Tom J Nowell
这不能通过WP_Query
, 这个orderby
参数可以接受多个值,但这些值告诉它按什么排序,即日期、时间、标题等These are the valid values
您可以指定它必须按post meta排序,但不能指定多个post meta,因为它使用meta_key
选项,它不接受数组,只能有一个值
要做到这一点,您需要使用原始SQL,即使这样,单次查询也不可能做到这一点
最重要的是,这个查询非常昂贵而且速度很慢,这样做会使它变得更慢。
作为旁白,切换
_stock_status
使用分类法而不是post meta,将大大加快任何使用它的查询的速度。如果您需要搜索某个内容或列出包含该键/值对的所有内容,请不要将其存储在post meta中。这就是分类法的作用。