Eu suspeito que o principal problema é que você deve usar o objeto WP_Query
em vez de get_posts()
. O mais tardio, por padrão, só retorna itens com post_type de post
not products,
Então, dada uma categoria com o ID 26, o código a seguir retornaria seus produtos (WooCommerce 3 +):
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'posts_per_page' => '12',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id', //This is optional, as it defaults to 'term_id'
'terms' => 26,
'operator' => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
),
array(
'taxonomy' => 'product_visibility',
'field' => 'slug',
'terms' => 'exclude-from-catalog', // Possibly 'exclude-from-search' too
'operator' => 'NOT IN'
)
)
);
$products = new WP_Query($args);
var_dump($products);
Nas versões anteriores do WooCommerce, a visibilidade era armazenada como um meta-campo, portanto, o código seria:
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'posts_per_page' => '12',
'meta_query' => array(
array(
'key' => '_visibility',
'value' => array('catalog', 'visible'),
'compare' => 'IN'
)
),
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id', //This is optional, as it defaults to 'term_id'
'terms' => 26,
'operator' => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
)
)
);
$products = new WP_Query($args);
var_dump($products);
Aqui estamos retornando apenas produtos visíveis, 12 por página.
Dê uma olhada nos enlace para obter mais detalhes sobre como a segmentação por categoria funciona - geralmente é mais útil recuperar por lesma do que por ID!