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;
}