В современных проектах на WordPress часто возникает задача динамически выводить персонализированную информацию пользователя прямо в контенте страниц или записей. Если вы используете тему GeneratePress и редактор Gutenberg, то стандартных инструментов для вставки данных из пользовательского профиля в блоки по умолчанию нет. В этой статье мы подробно разберём, как добавить переменные из пользовательского профиля в Gutenberg-блоки на сайте с GeneratePress.
Почему важно использовать пользовательские данные в контенте
Персонализация контента повышает вовлечённость и улучшает пользовательский опыт. Например, можно выводить имя пользователя, его роль, дату регистрации или другие метаданные. Это полезно для образовательных порталов, интернет-магазинов с использованием личных кабинетов, корпоративных сайтов и многих других проектов.
В Gutenberg нет стандартного блока с динамическими переменными, но с помощью PHP и небольших приёмов можно реализовать удобное решение.
Добавление шорткода для вывода данных пользователя в GeneratePress
Первым шагом создадим шорткод, который будет возвращать нужные данные пользователя. Это позволит использовать шорткод в любом блоке Gutenberg, например в абзацах или в блоке «Код».
Добавьте следующий код в файл functions.php вашей дочерней темы GeneratePress или в плагин для пользовательских функций:
function generatepressru_user_profile_shortcode($atts) {
if (!is_user_logged_in()) {
return 'Пользователь не авторизован';
}
$user = wp_get_current_user();
$atts = shortcode_atts(array(
'field' => 'display_name', // имя поля по умолчанию
), $atts, 'gp_user');
switch ($atts['field']) {
case 'email':
return esc_html($user->user_email);
case 'registered':
return date_i18n(get_option('date_format'), strtotime($user->user_registered));
case 'role':
return esc_html(implode(', ', $user->roles));
case 'display_name':
default:
return esc_html($user->display_name);
}
}
add_shortcode('gp_user', 'generatepressru_user_profile_shortcode');Теперь в любом блоке Gutenberg можно вставить шорткод, например:
[gp_user field="display_name"]Он выведет имя текущего пользователя. Аналогично можно использовать поля email, registered (дата регистрации) и role.
Создание кастомного блока Gutenberg с динамическими переменными пользователя
Если вы хотите более удобный и современный способ — создадим собственный блок Gutenberg с выбором переменных пользователя в настройках блока.
Для этого понадобится базовое понимание JavaScript и React, а также установка @wordpress/scripts для сборки блока. Ниже пример упрощённого блока.
Структура блока и регистрация на PHP
function generatepressru_register_user_variable_block() {
register_block_type('generatepressru/user-variable', array(
'editor_script' => 'generatepressru-user-variable-script',
'render_callback' => 'generatepressru_render_user_variable_block',
'attributes' => array(
'field' => array('type' => 'string', 'default' => 'display_name'),
),
));
}
add_action('init', 'generatepressru_register_user_variable_block');
function generatepressru_render_user_variable_block($attributes) {
if (!is_user_logged_in()) {
return 'Пользователь не авторизован';
}
$user = wp_get_current_user();
switch ($attributes['field']) {
case 'email':
return esc_html($user->user_email);
case 'registered':
return date_i18n(get_option('date_format'), strtotime($user->user_registered));
case 'role':
return esc_html(implode(', ', $user->roles));
case 'display_name':
default:
return esc_html($user->display_name);
}
}JavaScript код блока (React)
В файле src/index.js вашего блока добавьте такой код:
import { registerBlockType } from '@wordpress/blocks';
import { SelectControl } from '@wordpress/components';
import { useBlockProps } from '@wordpress/block-editor';
registerBlockType('generatepressru/user-variable', {
title: 'Переменная пользователя',
icon: 'admin-users',
category: 'widgets',
attributes: {
field: { type: 'string', default: 'display_name' },
},
edit({ attributes, setAttributes }) {
const blockProps = useBlockProps();
return (
<div {...blockProps}>
<SelectControl
label="Выберите переменную"
value={attributes.field}
options={[
{ label: 'Имя пользователя', value: 'display_name' },
{ label: 'Email', value: 'email' },
{ label: 'Дата регистрации', value: 'registered' },
{ label: 'Роль', value: 'role' },
]}
onChange={(field) => setAttributes({ field })}
/>
<p>В контенте отобразится выбранная переменная текущего пользователя.</p>
</div>
);
},
save() {
return null; // рендерим на сервере
},
});Использование плагинов для расширения функционала профиля пользователя
Если нужен более сложный профиль с дополнительными полями, можно использовать плагины, например Clearfy Pro, который позволяет управлять полями пользователя и оптимизировать работу WordPress.
Для работы с пользовательскими метаполями полезен плагин Expert Review, в котором можно создавать собственные блоки с динамическими данными.
Советы по безопасности и производительности
При работе с данными пользователя важно учитывать безопасность. Всегда используйте функции экранирования, например esc_html() или esc_attr(), чтобы избежать XSS-уязвимостей.
Также кешируйте данные, если это возможно, чтобы снизить нагрузку на сервер при большом количестве пользователей.
И не забывайте проверять, авторизован ли пользователь перед выводом персональных данных, чтобы не раскрывать информацию посторонним.
Выводы и рекомендации
Добавление переменных из пользовательского профиля в Gutenberg на сайте с GeneratePress — задача вполне выполнимая и полезная для персонализации контента. Используя шорткоды или создавая собственные блоки, вы можете гибко управлять выводом данных без сложных сторонних решений.
Такой подход позволяет сделать сайт более дружественным и функциональным, особенно если вы создаёте проекты с личными кабинетами или образовательными материалами.
Для удобства и расширения возможностей рекомендую обратить внимание на плагины из WPShop, которые помогут автоматизировать и упростить многие задачи.