я бы хотел включить установите флажок навсегда для всех существующих продуктов, а также для вновь добавленных продуктов. Я посмотрел в настройках WooCommerce, но это невозможно. У меня есть поиск по интернету, и я ничего не нашел.
Как я могу массово редактировать все существующие продукты, чтобы получить отзывы Включено?
Когда мы добавляем новый продукт, он также должен автоматически проверяться.
Есть ли способ сделать это?
Является ли это возможным?
Заранее спасибо.
Это возможно, но вам понадобятся 2 функции. Один для обновления всех существующих продуктов в вашем магазине, который вы будете использовать только один раз, а другой для всех недавно опубликованных продуктов.
Шаг 1 — Используйте это только один раз на function.php и перейдите к front-end и перейдите на любую страницу. После этого прокомментируйте этот код или удалите его. Все ваши существующие продукты были обновлены.
// Updating all products that have a 'comment_status' => 'closed' to 'open'
function updating_existing_products_once(){
$args = array(
// WC product post type
'post_type' => 'product',
// all posts
'numberposts' => -1,
'comment_status' => 'closed',
'post_status' => 'publish',
);
$shop_products = get_posts( $args );
foreach( $shop_products as $item){
$product = new WC_Product($item->ID);
wp_update_post( array(
'ID' => $item->ID,
'comment_status' => 'open',
) );
}
}
// After usage comment this line below
updating_existing_products_once();
Шаг 2 — Эта функция будет обновлять новые созданные продукты, которые имеют «comment_status» => «закрыто», чтобы «открыть» (отзывы о WooCommerce)…
add_action('transition_post_status', 'creating_a_new_product', 10, 3);
function creating_a_new_product($new_status, $old_status, $post) {
if( $old_status != 'publish' && $new_status == 'publish' && !empty($post->ID) && in_array( $post->post_type, array( 'product') ) ) {
if ($post->comment_status != 'open' ){
$product = new WC_Product($post->ID);
wp_update_post( array(
'ID' => $post->ID,
'comment_status' => 'open',
) );
}
}
}
Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.
Этот код протестирован и работает.
В дополнение к отличному ответу LoicTheAztec, я бы хотел добавить другую опцию для «Шаг 1».
Вы можете просто выполнить простой запрос, который не требует итерации по циклу:
global $wpdb;
$wpdb->query("UPDATE {$wpdb->posts} SET comment_status = 'open' WHERE post_type = 'product'");
Обратите внимание намеренный упущение comment_status
а также post_status
в WHERE
пункт. Не имеет значения, что неопубликованные продукты имеют статус открытого комментария, а также не имеет значения, что продукты, для которых уже установлено значение comment_status, переустанавливаются на открытие.
Просто добавьте приведенный выше код внизу вашей темы. functions.php
файл, а затем закомментируйте их после того, как он был запущен один раз:
// Commented out so it won't run
// global $wpdb;
// $wpdb->query("UPDATE {$wpdb->posts} SET comment_status = 'open' WHERE post_type = 'product'");