it-swarm.com.de

WooCommerce bedingte Meta-Abfrage

Bei dieser Frage weiß ich, wie man sie löst, aber ich hoffe, dass es einen besseren/schnelleren Weg gibt, sie zu lösen.

Ich habe eine benutzerdefinierte Meta-Abfrage in meiner Produktschleife, die mein Produkt nicht anzeigt, wenn der Lagerbestand 0 ist. Ich möchte dies jedoch nur tun, wenn für ein Produkt die Option "Nachbestellung" auf "Nein" gesetzt ist. Ist dies möglich, ohne 2 Abfragen auszuführen (eine, die alle Beiträge abruft und prüft, ob Rückstände aktiviert sind, und eine, die die Meta-Abfrage nur ausführt, wenn Rückstände nicht aktiviert sind)?

Hier ist meine benutzerdefinierte Meta-Abfrage in meinem 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 );
}

BEARBEITEN: Ich habe die Abfrage geändert in:

$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 );

Dies sollte ausreichen, aber aus irgendeinem Grund funktioniert es immer noch nicht. Wenn ich in den WooCommerce-Einstellungen nicht auf Lager befindliche Produkte verstecke, werden bei aktivierten Rückständen weiterhin keine Produkte mit einem Lagerbestand von 0 angezeigt.

3
Jasboss

Die Standardrelation für eine Meta-Abfrage ist AND. Wenn Sie also zwei Bedingungen haben, werden diese als solche behandelt:

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

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

Erhalten Sie alle Produkte mit einem _stock-Metawert NOT IN 0.000000UND_backorders NOT EQUAL TO no

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

3
userabuser