Consulta de productos de Woocommerce para el estado del stock

1 minuto de lectura

avatar de usuario
María Puchkova

Utilizo 3 estados de disponibilidad: ‘en stock’, ‘agotado’ y ‘permitir pedidos pendientes’. Quiero exportar productos que solo están en estado ‘en stock’ a XML. El problema es que woocommerce devuelve el valor “instock” para ambos estados: ‘in stock’ y ‘allow for backorders’. Ahora la consulta se ve así:

$query = array(
    'post_type' => 'product',
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => '_stock_status',
            'value' => 'instock'
        )
    )
);
$wp_query = & new WP_Query($query);
while ($wp_query->have_posts()) : $wp_query->the_post();

Y exporta productos con estados ‘instock’ y ‘backorders_allowed’. Tal vez exista la forma de excluir productos con ‘backorders_allowed’.

Puede tener múltiples filtros meta_query. Ver (http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters). Por defecto, la relación entre estos filtros es Y, lo cual está bien. Puede agregar un filtro para _back_order = no.

$query = array(
    'post_type' => 'product',
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => '_stock_status',
            'value' => 'instock'
        ),
        array(
            'key' => '_backorders',
            'value' => 'no'
        ),
    )
);
$wp_query = & new WP_Query($query);
while ($wp_query->have_posts()) : $wp_query->the_post();

Es muy recomendable usar WC_Product_Query() en vez de WP_Query().

Entonces, estoy mostrando cómo puedes hacer esto usando WC_Product_Query().

$query_args = array(
    'limit'   => 10, //or whatever number of products you want to get.
    'stock_status' => 'instock' // or 'outofstock' or 'onbackorder' 
);

$query = new WC_Product_Query( $query_args );
$products = $query->get_products();

Nota: si desea incluir varios stock_status, simplemente puede usar una matriz.

'stock_status' => array('instock', 'outofstock', 'onbackorder') 

¿Ha sido útil esta solución?