Добавить шаблон комментария с именем класса из functions.php


Я хочу добавить дополнительное имя класса к моему comment template (оболочке div перед самим сообщением), которое указано в functions.php . Имя класса в functions.php это дополнительное поле в разделе моего профиля пользователей, и я хочу получить эту строку и добавить ее в качестве дополнительного имени класса в свой шаблон комментариев.

То, что я хочу добавить: $cityofuser->user_city

Вопрос в том, как мне это сделать? Если я использую $classes[] = 'comment-author-' . sanitize_html_class(echo $cityofuser->user_city); в шаблоне, это не сработает. Я получаю такие ошибки, как syntax error, unexpected 'echo'

Редактировать:

В моей регистрационной форме люди могут добавлять информацию в новое поле, указывая город, в котором они живут. Я хочу получить вывод этого поля, сделать его новым именем класса в шаблоне комментариев, и я хочу изменить фон публикации пользователей на основе этого имени класса. Итак, 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 или что-то в этом роде, но я понятия не имею, как это сделать.

Author: Siyah, 2014-12-06

1 answers

Вам следует рассмотреть возможность подключения к 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 );

Пример вывода:

<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;
});

Пример вывода:

<article id="post-1" 
         class="post-1 post type-post status-publish format-standard 
                hentry category-uncategorized reykjavik">

Где reykjavik был добавлен в качестве последнего класса post на основе нашего фильтра выше.

 3
Author: birgire, 2014-12-06 17:30:42