评论类型类似于帖子类型,因为它只允许查询特定类型的评论,就像帖子类型允许查询一个或多个帖子类型一样。
就像核心帖子类型(页面、帖子)一样,也有核心评论类型:\'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);