web-dev-qa-db-fra.com

Méta-requête conditionnelle WooCommerce

Pour cette question, je sais comment le résoudre mais j'espère qu'il existe un moyen meilleur/plus rapide pour le résoudre.

J'ai une méta-requête personnalisée dans la boucle de mon produit qui n'affiche pas mon produit si le stock est à 0, mais je ne souhaite le faire que lorsque les commandes en attente sont définies sur non sur un produit. Est-ce possible sans exécuter 2 requêtes (une qui obtient toutes les publications et vérifie si les commandes en attente sont activées et une qui exécute uniquement la méta-requête si les commandes en attente ne sont pas activées)?

Voici ma méta requête personnalisée dans mon 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 );
}

EDIT: j'ai changé la requête en:

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

Cela devrait faire l'affaire, mais pour une raison quelconque, cela ne fonctionne toujours pas. De plus, lorsque je cache les produits en rupture de stock dans les paramètres WooCommerce, les produits avec un stock de 0 ne sont toujours pas affichés lorsque les commandes en attente sont activées.

3
Jasboss

La relation par défaut pour une méta requête est AND. Ainsi, lorsque vous avez deux conditions, elles sont traitées comme telles:

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

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

Obtenez tous les produits avec une méta valeur _stock NOT IN 0.000000ET_backorders PAS ÉGAL VERS no

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

3
userabuser