我正在开展一个项目,该项目要求评论标记并可通过标记进行搜索。有没有办法在WP中实现它,或者我应该寻找一些解决方法(比如创建子帖子类型而不是注释并为其应用标签)?
如果有,我该怎么办?
谢谢。
答案 0 :(得分:0)
您可以使用comment meta来存储和检索特定评论的标签。
首先,将标记字段添加到注释表单并填充标记。以下代码将在注释textarea之后立即添加“select”字段,并使用标记填充它。
add_filter( 'comment_form_defaults', 'change_comment_form_defaults');
function change_comment_form_defaults( $default ) {
$commenter = wp_get_current_commenter();
$out = '<label for="comment_tags">Tags:</label><select name="comment_tags" multiple>';
foreach ( get_tags() as $tag ) {
$out .= '<option value="<?php echo $tag->term_id; ?>"><?php echo $tag->name; ?></option>';
}
$out .= '</select>';
$default[ 'comment_field' ] .= $out;
return $default;
}
在评论存储在数据库中后立即触发 comment_post 操作。您可以使用它来存储post meta。
add_action('comment_post', 'add_tags_to_comment', 10, 2);
function add_tags_to_comment( $comment_ID, $comment_approved ) {
foreach($_POST["comment_tags"] as $comment_tag) {
add_comment_meta( $comment_ID, "comment_tag", $comment_tag );
}
}
我不想将选定的标签作为数组存储在单个记录中,而是将每个标签存储为单独的记录。这样可以更轻松地根据标签搜索评论。
如果要检索评论的标记,可以 get_comment_meta
$tags = get_comment_meta($comment_ID, "comment_tag");
foreach($tags as $tag_id) {
$tag_term = get_term($tag_id, 'post_tag');
echo $tag_term->name;
}
使用 WP_Comment_Query 根据标记搜索评论。
$tags = array(1,32,5,4); /* Replace it with tags you want to search */
$args = array(
'meta_query' => array(
array(
'key' => 'comment_tag',
'value' => $tags,
'compare' => 'IN'
)
)
);
$comment_query = new WP_Comment_Query( $args );
希望这对你有所帮助。