web-dev-qa-db-ja.com

WooCommerce条件付きメタクエリ

この質問に関して、私はそれを解決する方法を知っています、しかし、私はそれを解決するためのより良い/より速い方法があることを願っています。

在庫が0の場合、商品ループにカスタムメタクエリが表示されませんが、商品のバックオーダーがnoに設定されている場合にのみこれを実行します。 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の商品は表示されません。

3
Jasboss

メタクエリのデフォルトの関係はANDなので、2つの条件があるときそれらはそのように扱われるでしょう:

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

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

_stockメタ値 NOT IN 0.000000 _および_ _backorders NOT EQUAL TO noを持つすべての製品を入手する

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

3
userabuser