禁止wordpress某个分类下的评论功能

有时候,我们仅仅需要屏蔽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/

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注