我想为所有现有产品和新添加的产品永久启用审核复选框。我查看了WooCommerce设置,但那是不可能的。我在互联网上搜索,但我找不到任何东西。
如何批量修改所有现有产品以获得评论已启用?
当我们添加新产品时,它也应该自动检查。
有办法吗?
有可能吗?
提前致谢。
答案 0 :(得分: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'=>的新创建产品'关闭'到'打开'(对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文件中或任何插件文件中。
此代码经过测试且有效。
答案 1 :(得分:3)
除了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'");
答案 2 :(得分:0)
我知道这是一个古老的问题,但是如果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
}
答案 3 :(得分:0)
用一种肮脏的方法立即修复事物(可逆)。归功于Evgeniy
https://developer.wordpress.org/reference/functions/comments_open/
虽然原始线程讨论了如何在各处禁用注释,但我改变了效果:)
这将使您无法按产品决定,因为它会覆盖整个站点的复选框!
免责声明:风险自负!
add_filter('comments_open','__return_true');