WooCommerce条件元查询

时间:2016-03-02 作者:Jascha

对于这个问题,我知道如何解决,但我希望有更好/更快的方法来解决它。

我的产品循环中有一个自定义元查询,如果库存为0,它不会显示我的产品,但我只想在产品的缺货订单设置为否时执行此操作。如果不运行2个查询(一个获取所有帖子并检查是否启用了缺货订单,另一个仅在未启用缺货订单时执行元查询),这是否可行?

这是我的自定义元查询functions.php:

add_action( \'woocommerce_product_query\', \'woo_custom_outofstock_query\' );

function woo_custom_outofstock_query( $q ) {
    $meta_query = $q->get( \'meta_query\' );

    $meta_query[] = array(
        \'key\'       => \'_stock\',
        \'value\'     => \'0.000000\',
        \'compare\'   => \'NOT IN\'
    );

    $q->set( \'meta_query\', $meta_query );
}
编辑:我将查询更改为:

$meta_query = $q->get( \'meta_query\' );

$meta_query[] = array(
    \'key\'       => \'_stock\',
    \'value\'     => \'0.000000\',
    \'compare\'   => \'NOT IN\'
);

$meta_query[] = array(
    \'key\'       => \'_backorders\',
    \'value\'     => \'no\',
    \'compare\'   => \'!=\'
);

$q->set( \'meta_query\', $meta_query );
这应该可以做到,但由于某些原因,它仍然不起作用。此外,当我在WooCommerce设置中隐藏缺货产品时,当启用缺货订单时,它仍然不会显示库存为0的产品。

1 个回复
最合适的回答,由SO网友:Adam 整理而成

元查询的默认关系是AND, 因此,当您有两种情况时,它们将被视为:

$meta_query[] = array(
    \'key\'       => \'_stock\',
    \'value\'     => \'0.000000\',
    \'compare\'   => \'NOT IN\'
);

$meta_query[] = array(
    \'key\'       => \'_backorders\',
    \'value\'     => \'no\',
    \'compare\'   => \'!=\'
);
使用_stock 元值NOT IN 0.000000 AND _backorders NOT EQUAL TO no

https://codex.wordpress.org/Class_Reference/WP_Meta_Query

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在