Вы можете использовать комментарий meta для хранения и получения тегов определенного комментария.
Прежде всего, добавьте поле тега в форму комментария и заполните теги. Следующий код добавит поле «select» сразу после комментария textarea и заполнит его тегами.
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 действие вызывается сразу после того, как комментарий хранится в базе данных. Вы можете использовать его для хранения метаданных.
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);
Надеюсь, это вам помогло.