Conditional tag for comments

时间:2017-06-12 作者:Christine Cooper

如何检查当前循环是否为注释?类似于is_comment().

我正在建立一个自定义update_x_meta() 根据类型更新元数据的函数,例如:

if ( is_single() || is_attachment() || is_page() ) {
    // post, page, attachment
    update_post_meta($id, $meta_data, $meta_value);
} elseif (is_author()) {
    // author page
    update_user_meta($id, $meta_data, $meta_value);
} elseif ( is_category() || is_tag() || is_tax() ) {
    // taxonomies
    update_term_meta($id, $meta_data, $meta_value);
} elseif ( is_comment() ) {
    // comment
    update_comment_meta($id, $meta_data, $meta_value);
}
我想为了实现这一点,我需要用一个特定的ID来定位条件标记,比如is_single($id) 等,虽然这可能不起作用,因为我们可以有相同的身份证的职位,条款。。。

我觉得应该已经有update_x_meta() 核心中已存在函数类型。

1 个回复
SO网友:Johansson

注释弹出页面包含一个注释循环,可以通过is comments popup() 条件,返回truefalse. 然而,我看不到这个特性在现代开发中被使用。这可能是唯一包含注释直接循环的地方。

这个$wp_query 本身不包含任何评论数据,除非帖子是否有评论(以及存在的评论数量)。注释本身稍后会在模板文件中调用(例如single.php) 通过使用如下循环:

while ( have_posts() ) { 
    the_post(); 
    get_template_part( \'SOME TEMPLATE HERE\' ); 
    comments_template();
}
Thecomments_template() 自身将使用WP_Comments_Query() 查询注释列表。所以,在评论循环中意味着在页面或帖子模板上。因此,问题中张贴的条件没有帮助,除非我们这样更改:

if ( is_single() || is_attachment() || is_page() ) {
    // post, page, attachment
    update_post_meta($id, $meta_data, $meta_value);
    if(have_comments()) {
        // Run some stuff here
    }
} elseif (is_author()) {
    // author page
    update_user_meta($id, $meta_data, $meta_value);
} elseif ( is_category() || is_tag() || is_tax() ) {
    // taxonomies
    update_term_meta($id, $meta_data, $meta_value);
}
这将同时更新评论和帖子。

但有一个过滤器,它会在任何时候触发comment_template() 函数是在模板文件中调用的,因此它可能是挂接和更新注释元的地方:

add_filter( "comments_template", "update_comments_meta" );
function update_comments_meta($comment_template){
    global $post;
    if ( have_comments() ){
        // Do some stuff here
    }
    return $comment_template;
}

结束

相关推荐