Добавить шаблон комментария с именем класса из 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
или что-то в этом роде, но я понятия не имею, как это сделать.
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 на основе нашего фильтра выше.