带有Pre_Get_POST的多个元密钥排序

时间:2018-05-10 作者:Gabriel Souza

我正在尝试通过多个元键订购产品,以便最畅销的产品首先出现,最后是缺货的产品。

我最终设法让缺货的产品参展,但卖得最多的产品没有正确订购。

我在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 );

1 个回复
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中。这就是分类法的作用。

结束

相关推荐

对WooCommerce的Functions.php更改不起作用

我正在尝试将其添加到函数中。php。在我的另一个站点上的测试实验室中,它可以很好地添加测试信息。但在这个网站上,我试图把它添加到什么都没有发生的情况下。该网站正在使用最新的woocommerce运行一个建筑节俭主题。有什么想法吗?我基本上只是想在每个产品页面上添加一行类似于免责声明但无法添加的文本。add_action(\'woocommerce_before_add_to_cart_form\',\'print_something_below_short_description\');