Este código é um filtro para WooCommerce que ajusta a ordenação dos produtos na loja, classificando-os com base no seu status de estoque. Ele é adicionado ao WordPress por meio da função add_filter(), direcionado especificamente para modificar os argumentos de ordenação do catálogo do WooCommerce (woocommerce_get_catalog_ordering_args). Com uma prioridade alta (999), esse filtro tenta garantir que sua execução ocorra após a maioria dos outros filtros, minimizando conflitos.

O código altera o método de ordenação para usar o campo meta_value relacionado à chave _stock_status. Os produtos são ordenados em ordem decrescente (DESC), o que, dependendo da implementação exata do WooCommerce e de seus valores de status de estoque, poderia teoricamente colocar itens disponíveis (instock) antes dos itens não disponíveis (outofstock, onbackorder).

A parte meta_query é utilizada para incluir explicitamente produtos com qualquer um dos status de estoque mencionados, garantindo que a consulta ao banco de dados considere esses critérios na hora de buscar e ordenar os produtos. Esse ajuste é importante para assegurar que a ordenação leve em consideração apenas os produtos que se encaixam nos critérios especificados, facilitando para os usuários a visualização dos produtos com base na sua disponibilidade.

No entanto, é importante notar que a eficácia deste código pode variar dependendo de temas e plugins específicos utilizados junto com o WooCommerce, bem como a configuração do próprio WooCommerce. Experimentação e ajustes podem ser necessários para obter os resultados desejados em um site específico.

add_filter( 'woocommerce_get_catalog_ordering_args', 'ordenar_produtos_por_disponibilidade', 999 );

function ordenar_produtos_por_disponibilidade( $args ) {
    $args['orderby'] = 'meta_value';
    $args['order'] = 'ASC'; // Aqui escolhe a ordem ASC (com estoque), DESC (sem estoque)
    $args['meta_key'] = '_stock_status';
    $args['meta_query'] = array(
        'relation' => 'OR',
        array(
            'key' => '_stock_status',
            'value' => 'instock',
            'compare' => '='
        ),
        array(
            'key' => '_stock_status',
            'value' => 'outofstock',
            'compare' => '='
        ),
        array(
            'key' => '_stock_status',
            'value' => 'onbackorder',
            'compare' => '='
        ),
    );
    return $args;
}

Categorized in:

WooCommerce, WordPress,