Woocommerce Вывод новых товаров по определённым критериям
Нужно вывести 20 последних товаров, но только те, у которых есть Фото и они в наличии. Вот мои попытки:
add_action( 'recent_query', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $query ) {
$query->set( 'meta_query',
array(
'relation' => 'AND',
//если в наличии
array(
'key' => '_stock_status',
'value' => 'instock',
'compare' => '='
),
//если есть фото
array(
'key' => '_thumbnail_id',
'value' => '0',
'compare' => '>'
),
)
);
}
do_action( 'recent_query' );
Вывод мне непонятен, в общем это не то в любом случае
$args = array( 'post_type' => 'product', 'orderby' => 'date', 'order' => 'DESC', ); $query = new WP_Query( $args ); foreach ($query as $item) { echo '<pre style="display: none">' . var_dump($item->post_title) . '</pre>'; }Выводит все товары. Т.к. мне нужно понимать, если изображение, этот подход не работает, потому что дефолтное изображение тоже считается, что есть.
$args = array( 'post_type' => 'product', 'posts_per_page' => 10, 'orderby' => 'date', ); $iwposts = new WP_Query( $args ); foreach( $iwposts as $post ){ setup_postdata($post); var_dump($post); echo '<hr/>'; } wp_reset_postdata();Почти аналог того, что выше
Ответы (2 шт):
Автор решения: Valerii Vasiliev
→ Ссылка
Попробуйте так
$args = array(
'post_type' => 'product',
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => 20,
'meta_query' => (
'relation' => 'AND',
array(
'key' => '_stock_status',
'value' => 'instock',
'compare' => '='
),
//если есть фото
array(
'key' => '_thumbnail_id'
),
)
);
$query = new WP_Query( $args );
foreach ($query as $item) {
echo '<pre style="display: none">' . var_dump($item->post_title) . '</pre>';
}
wp_reset_postdata();
Автор решения: Дмитрий
→ Ссылка
И оба array() нужно заключить ещё в один array(). Вот рабочий пример с исправлениями от "Рома Хр" и исправленным выводом:
<?php
$args = array(
'post_type' => 'product',
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => 20,
'meta_query' => ( array(
array(
'key' => '_stock_status',
'value' => 'instock'
),
array(
'key' => '_thumbnail_id',
'compare' => 'EXIST'
) )
)
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
} else {
echo __( 'Продуктов не найдено' );
}
wp_reset_postdata();
?>