有时候,我们仅仅需要屏蔽wordpress某个分类下所有文章的评论,而不是全站禁止评论。今天,我们将通过这篇教程学会如何达到上述目的。
在你的主题文件夹下的functions.php中粘贴如下代码:
add_action( 'the_post', 'st_check_for_closed' ); function st_check_for_closed() { global $post; $my_post_cat = wp_get_post_categories($post->ID); $disabled_cat = array( "1", "3"); // this is he array of disabled categories. Feel free to edit this line as per your needs. $my_result = array_intersect($my_post_cat,$disabled_cat); if (empty ( $my_result ) ) { return; } else { add_filter( 'comments_open', 'st_close_comments_on_category', 10, 2 ); add_action('wp_enqueue_scripts', 'st_deregister_reply_js'); } } function st_deregister_reply_js() { wp_deregister_script( 'comment-reply' ); } function st_close_comments_on_category ($open, $post_id) { $open = false; }
上面代码的 $disabled_cat = array( "1", "3");
里 1 和 3代表了你希望禁止评论的分类,你可以根据需要自己调整。
下面来解释一下这段代码的含义:
1. 为post这个动作创建一个钩子
根据wordpress的代码手册,我们知道 the_post 允许我们在文章发布之后设置文章是否可以评论。在这段代码里我们设置了一个钩子 st_check_for_closed 来判断已经发布的文章是否属于被禁止评论的分类。
2. 取得禁止评论的分类
在这里我们用了一个函数 wp_get_post_categories 来获得禁止评论的分类。
3. 检查文章所属分类是否禁止评轮
我们用了一个函数 array_intersect 来判断在变量 $my_post_cat 和 $disable_cat array 之间是否存在相互影响。如果有影响,我们就可以判断某篇文章是属于被禁止评论的分类之下的。
4. 进行动作过滤
如果文章所属目录为禁止评论,那么我们用一个钩子 comments_open 来为其关闭评论。我们还需要为 函数 st_close_comments_on_category 和 st_deregister_reply_js 创建钩子,其目的是标记评论已经关闭并在该文章页面上反注册comment-reply.js。
如果你觉得修改代码比较麻烦的话,你也可以用下面这个插件来实现同样的目的:http://wordpress.org/plugins/disable-comments-on-post-categories/