从函数添加类名注释模板。php

时间:2014-12-06 作者:Siyah

我想在我的comment template (post本身之前的div包装)在函数中声明。php。函数中的类名。php是我的用户配置文件部分中的一个额外字段,我想获取该字符串并将其作为额外的类名添加到我的注释模板中。

我想补充的是:$cityofuser->user_city

问题是:我该怎么做?如果我使用$classes[] = \'comment-author-\' . sanitize_html_class(echo $cityofuser->user_city);在模板中,它将不起作用。我会遇到如下错误syntax error, unexpected \'echo\'

Edit:

在我的登记表中,人们可以在新字段中添加信息,说明他们居住的城市。我想得到这个字段的输出,在评论模板中创建一个新的类名,并且我想根据这个类名更改用户帖子的背景。所以custom field echo $cityofuser->user_city 我制作了(在functions.php中)并添加到我的注册页面,这是我想在整个网站中使用的东西。

我想在此处添加新的类名:<div id="comment-5" class="comment byuser comment-author-admin even thread-odd thread-alt depth-1">

完成后,也在帖子上。那一定是get_post_author?=cityofuser=Montreal 或者别的什么,但我不知道怎么做。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

你应该考虑加入comment_class()post_class() 过滤器,如果您的主题支持它。

使用comment_class 过滤器:

我们可以添加以下过滤器:

/**
 * Add a custom comment class, based on a given comment author\'s user meta field.
 *
 * @see http://wordpress.stackexchange.com/a/170443/26350
 */

add_filter( \'comment_class\', function( $classes, $class, $comment_id, $post_id ) {

    // Custom user meta key:
    $key = \'city\';           // <-- Edit this to your needs!

    // Fetch the comment object:
    $comment = get_comment( $comment_id );

    // Check if the comment author is a registered user:
    if ( ! is_null( $comment ) && $comment->user_id > 0 )
    {
        // Check for the custom user meta:
        if( \'\' !== ( $value = get_user_meta( $comment->user_id, $key, true ) ) )
            $classes[] = sanitize_html_class( $value );
    }

    return $classes;
}, 10, 4 );

Output example:

<li class="comment byuser comment-author-someuser bypostauthor 
           odd alt depth-2 reykjavik" id="li-comment-78">
    <article id="comment-78" class="comment">
其中reykjavik 已添加为给定评论作者的城市用户元。

使用post_class 过滤器:

对于post_class 过滤器,我们可以使用:

/**
 * Add a custom post class, based on a given post author\'s user meta field.
 *
 * @see http://wordpress.stackexchange.com/a/170443/26350
 */

add_filter( \'post_class\', function( $classes, $class, $post_id ) {

    // Custom user meta key:
    $key = \'city\';           // <-- Edit this to your needs!

    // Fetch the comment object:
    $post = get_post( $post_id );

    if( ! is_null( $post ) && $post->post_author > 0 )
    {
        // Check for the custom user meta:
        if( \'\' !== ( $value = get_user_meta( $post->post_author, $key, true ) ) )
            $classes[] = sanitize_html_class( $value );

    }

    return $classes;
}, 10, 3 );
下面是一个在循环中工作的较短版本:

/**
 * Add a custom post class, based on a given post author\'s user meta field.
 *
 * @see http://wordpress.stackexchange.com/a/170443/26350
 */

add_filter( \'post_class\', function( $classes, $class, $post_id ) {

    // Custom user meta key:
    $key = \'city\';           // <-- Edit this to your needs!

    // Check for the custom user meta:
    if( \'\' !== ( $value = get_the_author_meta( $key ) ) )
        $classes[] = sanitize_html_class( $value );

    return $classes;
});

Output example:

<article id="post-1" 
         class="post-1 post type-post status-publish format-standard 
                hentry category-uncategorized reykjavik">
其中reykjavik 根据上面的过滤器,已添加为最后一个post类。

结束

相关推荐

COMMENTS_TEMPLATE无效

如果我使用comments_template(); 它根本不起作用。但如果我把它改成global $withcomments; $withcomments = 1; comments_template( \'comments.php\', true ); 它显示了评论模板,但我需要设置disqs插件,插件不工作。我不明白,出于某种原因,要显示评论是非常困难的。。dev link(试图截断不相关的代码以保持简短)index.phpif ( have_posts() ) {