Я хотел бы постоянно включить флажок просмотра для всех существующих продуктов, а также для новых добавленных продуктов. Я просмотрел настройки WooCommerce, но это невозможно. У меня есть поиск в Интернете, и я ничего не нашел.

Как я могу массово изменить все существующие продукты, чтобы получить отзывы Включено ?

Когда мы добавляем новый товар, он также должен автоматически проверяться.

Как это сделать?
Является ли это возможным?

Заранее спасибо.

4
Upendra Sharma 3 Сен 2016 в 18:28

4 ответа

Лучший ответ

Это возможно , но вам потребуется 2 функции. Один для обновления всех существующих продуктов в вашем магазине, который вы будете использовать только один раз, а другой для всех недавно опубликованных продуктов.

Шаг 1 . Используйте его только один раз на function.php, затем перейдите в интерфейс и перейдите на любую страницу. После этого прокомментируйте этот код или удалите его. Все ваши существующие продукты были обновлены.

// 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' => 'closed' до 'open' (отзывы на 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 вашей активной дочерней темы (или темы) или также в любом файле плагина.

Этот код протестирован и работает.

4
LoicTheAztec 3 Сен 2016 в 15:44

В дополнение к отличному ответу LoicTheAztec я хотел бы добавить другой вариант для «Шаг 1».

Вы можете просто запустить простой запрос, который не требует повторения цикла:

global $wpdb;
$wpdb->query("UPDATE {$wpdb->posts} SET comment_status = 'open' WHERE post_type = 'product'");

Обратите внимание на намеренное опущение comment_status и post_status в предложении WHERE. Не имеет значения, что неопубликованные продукты имеют статус открытого комментария, а также то, что продукты, для которых comment_status установлено значение open, повторно устанавливаются для открытия.

Просто добавьте приведенный выше код в конец файла functions.php вашей темы, а затем закомментируйте их после того, как он был запущен один раз:

// Commented out so it won't run
// global $wpdb;
// $wpdb->query("UPDATE {$wpdb->posts} SET comment_status = 'open' WHERE post_type = 'product'");
3
random_user_name 3 Сен 2016 в 16:05

Я знаю, что это старый вопрос, но функция ниже может помочь кому-то, если ответ LoicTheAztec не сработает (например, для меня). По умолчанию при использовании jQuery на странице «Добавить продукт» будет установлен флажок отзывов. Надеюсь кому-нибудь помочь, ура! :-)

add_action( 'woocommerce_product_options_advanced', 'enable_reviews_by_default' );
function enable_reviews_by_default() {
?>
    <script>
        (function($){
            $('input[name=comment_status]').prop('checked', true);
        })(jQuery);
    </script>
<?php
}
0
Rafał Konarski 17 Мар 2019 в 11:50

Кстати грязный способ починки сразу (обратимый). Все кредиты парню Евгению

https://developer.wordpress.org/reference/functions/comments_open/

В то время как исходная ветка обсуждает, как отключить комментарии повсюду, я изменил эффект :)

Это лишает вас возможности принимать решение по каждому продукту, потому что переопределяет флажок для всего сайта!

Отказ от ответственности: делаете на свой страх и риск!

Add_filter ('comments_open', '__return_true');

0
Rumyan Tsekov 27 Мар 2019 в 14:27