Как изменить статус товаров, у которого нет изображения на "Черновик"?

Как поменять статус товара с "Опубликовано" на "Черновик", если у товара нет изображения.

Что необходимо прописать в условии?

add_filter( 'woocommerce_product_is_visible', function( $visible, $id ) {
if ( ! has_post_thumbnail( $id ) ) {
// change status
}
return $visible;
}, 10, 2 );

Ответы (1 шт):

Автор решения: Darth KYL

вы можете это сделать через функцию wp_update_post

if ( ! has_post_thumbnail( $id ) ) { 
    wp_update_post( [
        'ID' =>  $id,
        'post_status' => 'draft'
    ] );
}

если нужно исколючить все товары без изображения из запросов на фронте, то нужно использовать экшн pre_get_posts

add_action( 'pre_get_posts', 'products_pre_get_posts' );

function products_pre_get_posts( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->get( 'post_type' ) == 'product' ) {
        $meta_query = (array) $query->get( 'meta_query' );
        $meta_query[] = [
            'key' => '_thumbnail_id',
            'compare' => 'EXISTS'
        ];
        $query->set( 'meta_query', $meta_query );
    }
}
→ Ссылка