我可以将我的定制COMMENT_TYPE存储到wp_Comments表中吗?

时间:2015-05-04 作者:Mayeenul Islam

我正在开发一个系统,一篇帖子可以有多个回复/反馈。到目前为止,我将每个注释存储为序列化postmeta. 但就在今天,我发现我可以使用现有的comments 用于相同目的的表commentmeta 表I也可以在那里存储其他数据。

所以我用wp_insert_comment(), 我希望更健壮的是wp_new_comment(), 在那里我介绍了comment_type 参数我发现它存储:

  • null 对于默认注释类型“comments”,请参见pingback 对于“pingbacks”,和trackbacks 对于“trackbacks”,它类似于wp_posts\' post_type 列,但实际上是这样的吗?存储我的客户是否安全comment_type 是否有跟踪特定类型的评论/反馈?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

评论类型类似于帖子类型,因为它只允许查询特定类型的评论,就像帖子类型允许查询一个或多个帖子类型一样。

就像核心帖子类型(页面、帖子)一样,也有核心评论类型:\'comment\', \'pingback\', \'trackback\'.

两者的区别在于,默认情况下,WP_Query 不要获取不是明确要求的帖子类型,而只获取\'post\' 岗位类型。

在countrary,WP_Comment_Query, 默认情况下,fecth所有注释类型。

使用了很多主题wp_list_comments() 显示注释。

该函数具有\'type\' 参数,该参数允许设置要显示的注释类型。

例如,如果查看默认主题,则该函数is used without the type argument. 这意味着,即使使用自定义注释类型,特殊注释也会显示在大多数主题的“常规”注释中。

要解决此问题,可以使用\'pre_get_comments\' 钩子以防止自定义注释类型随“标准”注释类型一起提取:

/* Assuming \'my_custom_comment_type\' is the name of custom comment type */

add_action( \'pre_get_comments\', function(\\WP_Comment_Query $query) {
   /* only allow \'my_custom_comment_type\' when is required explicitly */
   if ( $query->query_vars[\'type\'] !== \'my_custom_comment_type\' ) {
      $query->query_vars[\'type__not_in\'] = array_merge(
          (array) $query->query_vars[\'type__not_in\'],
          array(\'my_custom_comment_type\')
      );
   }
});
使用上面的代码,您可以安全地使用\'my_custom_comment_type\' 存储不会与标准注释混淆的注释。

之后,当需要获取自定义注释时,需要显式地传递注释类型slug,一切都应该正常。

但是,请注意,通常用于检索注释的函数,如wp_list_comments()get_comments() 自动排除未批准的评论(或垃圾邮件)。

事实上,根据您的设置,如果您使用wp_new_comment() 要存储自定义注释,可能会将其存储为未经批准,即使显式使用适当的\'type\' 论点

为了避免这种情况,有三种可能性:

始终使用\'status\' 的参数WP_Comment_Query (或get_comments()) 设置为"all" 获取自定义注释类型时:这样,无论是否批准,所有注释都将被删除使用较低级别wp_insert_comment() 保存注释,并设置\'approved\' 参数到1\'pre_comment_approved\' 要始终将具有自定义注释类型的注释存储为已批准的注释,请执行以下操作:

add_filter( \'pre_comment_approved\', function( $approved, $data ) {
    return isset($data[\'comment_type\']) && $data[\'comment_type\'] === \'my_custom_comment_type\'
       ? 1
       : $approved;
}, 20, 2);

结束

相关推荐

How do comments work?

我在我的管理仪表板中单击“注释”按钮,只看到1条注释。我禁用了我网站上的评论,它甚至不是来自我的网站,而是来自另一个网站,看起来它们链接到了我的帖子。我不明白为什么我在评论部分看到。。。但后来我添加了facebook评论插件(https://wordpress.org/plugins/facebook-comments-plugin/) 我有人在评论。。。但我在我的管理仪表板的评论部分没有看到它们。有人能把这个弄清楚吗?我希望来自facebook的评论能出现在我的评论栏中。就目前而言,我不知道什么时候有人