2016-06-13 6 views
1

Я работаю над проектом, который требует, чтобы комментарии имели теги и были доступны для поиска по тегам. Есть ли способ реализовать его в WP, или я должен искать способ обхода (например, создать тип дочернего сообщения вместо комментариев и применить к нему теги)?WordPress - Добавить теги таксономии в комментарии

Если есть, как я могу это сделать?

спасибо.

ответ

0

Вы можете использовать комментарий 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); 

Надеюсь, это вам помогло.