この質問に関して、私はそれを解決する方法を知っています、しかし、私はそれを解決するためのより良い/より速い方法があることを願っています。
在庫が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の商品は表示されません。
メタクエリのデフォルトの関係は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
を持つすべての製品を入手する