Недавно я переместил биографию автора на боковую панель, чтобы сделать ее более заметной для читателей, особенно в длинных статьях, где важен опыт автора. В WordPress есть отличные встроенные поля автора, но не было четкого и гибкого способа их вывода в виджете — по крайней мере, без необходимости каждый раз писать собственную разметку или полагаться на функцию темы, которая может позже сломаться. Мне хотелось чего-то простого, расширяемого и гарантированно отображаемого только при отображении одного сообщения.
Виджет биографии автора на боковой панели
Этот плагин решает эту проблему. Он регистрирует облегченный виджет боковой панели, который извлекает информацию об авторе текущего сообщения и публикует ее с использованием строк замены. Эти строки позволяют мне создавать макет так, как я хочу, сохраняя при этом логику. Более того, я могу добавлять новые замены токенов, такие как профили в социальных сетях или настраиваемые поля, не кодируя сам виджет.
96,
)
);
$display_name = get_the_author_meta( 'display_name', $author_id );
$bio_raw = get_the_author_meta( 'description', $author_id );
$bio_clean = wp_kses_post( $bio_raw );
$bio = wpautop( $bio_clean );
$author_url = get_author_posts_url( $author_id );
$tokens = array(
'{avatar}' => get_avatar(
$author_id,
(int) $args['avatar_size'],
'',
$display_name,
array( 'class' => 'author-bio-widget-avatar' )
),
'{display_name}' => esc_html( $display_name ),
'{bio}' => $bio,
'{author_url}' => esc_url( $author_url ),
'{author_link}' => sprintf(
'%s',
esc_url( $author_url ),
esc_html( $display_name )
),
'{user_nicename}' => esc_html( get_the_author_meta( 'user_nicename', $author_id ) ),
'{user_email}' => antispambot( get_the_author_meta( 'user_email', $author_id ) ),
);
/**
* Filter: dk_author_bio_widget_tokens
*
* Allows adding or modifying tokens without changing the widget code.
*
* Example:
* add_filter( 'dk_author_bio_widget_tokens', function( $tokens, $author_id, $args ) {
* $tokens['{twitter}'] = esc_html( get_the_author_meta( 'twitter', $author_id ) );
* return $tokens;
* }, 10, 3 );
*/
return apply_filters( 'dk_author_bio_widget_tokens', $tokens, $author_id, $args );
}
/**
* Author Bio Sidebar Widget.
*/
class DK_Author_Bio_Sidebar_Widget extends WP_Widget {
public function __construct() {
parent::__construct(
'dk_author_bio_sidebar_widget',
__( 'Author Bio Sidebar', 'dk-author-bio-widget' ),
array(
'description' => __( 'Shows the current post author bio in the sidebar using substitution strings.', 'dk-author-bio-widget' ),
)
);
}
/**
* Frontend display.
*/
public function widget( $args, $instance ) {
// Only show on single blog posts.
if ( ! is_singular( 'post' ) ) {
return;
}
global $post;
if ( ! $post instanceof WP_Post ) {
return;
}
$author_id = (int) $post->post_author;
if ( ! $author_id ) {
return;
}
$title = isset( $instance['title'] ) ? $instance['title'] : '';
$template = isset( $instance['template'] ) ? $instance['template'] : '';
$avatar_size = isset( $instance['avatar_size'] ) ? (int) $instance['avatar_size'] : 96;
if ( '' === trim( $template ) ) {
// Default template: avatar, linked name, and bio.
$template = <<{author_link}
{bio}
HTML;
}
$tokens = dk_author_bio_widget_get_tokens(
$author_id,
array(
'avatar_size' => $avatar_size,
)
);
$content = strtr( $template, $tokens );
// Basic safety: allow only safe HTML in final output.
$content = wp_kses_post( $content );
echo $args['before_widget'];
if ( ! empty( $title ) ) {
echo $args['before_title'] . esc_html( $title ) . $args['after_title'];
}
echo '';
echo $args['after_widget'];
}
/**
* Backend form.
*/
public function form( $instance ) {
$title = isset( $instance['title'] ) ? $instance['title'] : __( 'About the Author', 'dk-author-bio-widget' );
$template = isset( $instance['template'] ) ? $instance['template'] : '';
$avatar_size = isset( $instance['avatar_size'] ) ? (int) $instance['avatar_size'] : 96;
$field_id_title = $this->get_field_id( 'title' );
$field_name_title = $this->get_field_name( 'title' );
$field_id_template = $this->get_field_id( 'template' );
$field_name_template = $this->get_field_name( 'template' );
$field_id_avatar_size = $this->get_field_id( 'avatar_size' );
$field_name_avatar = $this->get_field_name( 'avatar_size' );
?>
{avatar} –
{display_name} –
{bio} –
{author_url} –
{author_link} –
{user_nicename} –
{user_email} –
Как установить виджет боковой панели WordPress для авторов
- Создайте файл плагина. Скопируйте приведенный выше код в новый файл с именемauthor-bio-sidebar-widget.php.
- Загрузите его в WordPress. Поместите файл в папку wp-content/plugins/author-bio-sidebar-widget вашего сайта.
- Активируйте плагин. После загрузки перейдите на экран «Плагины» администратора WordPress и активируйте его, как любой стандартный плагин. За кулисами настраивать нечего.
После активации виджет становится доступен в разделе Внешний вид → Виджетыгде он работает как любой собственный виджет WordPress. Перетащите его на боковую панель, которая появляется в шаблонах отдельных сообщений. Поскольку виджет запрограммирован так, чтобы появляться только в избранных сообщениях, вам не нужно беспокоиться о его появлении на страницах архива, домашней странице или пользовательских типах сообщений — он просто остается скрытым повсюду.

Сам интерфейс виджета намеренно минимален. Он предоставляет поле заголовка, дополнительный размер аватара и поле шаблона, которое позволяет мне формировать выходные данные по своему вкусу. Реальная сила заключается в строках замены:
{avatar}
{author_link}
{bio}
- {аватар} Отображает изображение аватара автора в размере, указанном в настройках виджета.
- {отображаемое имя} Выводит общедоступное отображаемое имя автора.
- {биография} Вставляет биографическое описание автора из его профиля WordPress, используя правильное форматирование.
- {author_url} Печатает URL-адрес страницы архива автора, позволяя при необходимости создать собственную связанную разметку.
- {author_link} Автоматически выводит отображаемое имя автора в виде интерактивной ссылки на страницу архива автора.
- {user_nicename} Включено имя автора (в ссылке на архив используется удобный URL-адрес).
- {user_email} Выводит адрес электронной почты автора в запутанном формате с помощью функции WordPress antispambot(). Такие теги, как {avatar}, {display_name}, {bio}, {author_link} и {author_url} автоматически заменяются соответствующими данными об авторе. Если я хочу настроить макет или реализовать структуру HTML — заголовки, абзацы, оболочки или даже служебные классы — я могу это сделать, и виджет заполняет все динамически.
Что мне больше всего нравится, так это то, что вы можете позже добавить дополнительные поля с помощью простого фильтра. Если я добавлю поля социального профиля или настрою пользовательские метаданные, я смогу зарегистрировать новые токены, не затрагивая основной код виджета. Это делает виджет перспективным и гарантирует, что биография автора всегда отражает ту информацию, которую я хочу выделить.
После установки виджета и настройки шаблона биография автора автоматически обновляется для каждого сообщения, чтобы указать, кто его написал. Результатом является последовательное, заметное размещение био, которое повышает доверие и видимость на сайте.

