Иногда в проектах на WordPress возникает задача отображать разные части контента на одной странице в зависимости от определённых условий: роли пользователя, устройства, параметров URL или других факторов. В этой статье подробно разберём, как реализовать условное разделение контента на страницах WordPress с примерами кода и рекомендациями по плагинам.
Почему важно разделять контент по условиям?
Под условным контентом понимается вывод разных блоков информации для разных категорий пользователей или ситуаций. Это помогает улучшить пользовательский опыт, повысить конверсию и оптимизировать работу сайта. Например:
- Показать приветствие только зарегистрированным пользователям
- Вывести специальные предложения для мобильных устройств
- Отобразить разные тексты в зависимости от параметров в URL
Безусловный вывод всего подряд увеличивает нагрузку на пользователя и снижает эффективность коммуникации.
Условный вывод контента через PHP в шаблонах WordPress
Самый прямой способ — использовать условные теги WordPress и писать логику в файлах темы. Например, условие для отображения контента только для авторизованных пользователей:
if ( is_user_logged_in() ) {
echo '<p>Добро пожаловать, уважаемый пользователь!</p>';
} else {
echo '<p>Пожалуйста, войдите, чтобы увидеть эксклюзивный контент.</p>';
}Другой пример — вывод контента в зависимости от параметра в URL (например, ?promo=true):
if ( isset($_GET['promo']) && $_GET['promo'] === 'true' ) {
echo '<div class="promo-block">Специальное предложение для вас!</div>';
} else {
echo '<div>Обычный контент страницы</div>';
}Для более сложной логики стоит использовать функции, чтобы не захламлять шаблоны:
function wpmax_condition_content() {
if ( is_user_logged_in() ) {
return '<p>Только для зарегистрированных пользователей</p>';
}
if ( wp_is_mobile() ) {
return '<p>Контент для мобильных устройств</p>';
}
return '<p>Общий контент для всех</p>';
}В шаблоне вызов будет таким: echo wpmax_condition_content();
Использование шорткодов для условного контента
Чтобы редакторы могли вставлять условный контент прямо в посты и страницы, можно создать шорткод. Пример шорткода, который покажет контент только для авторизованных пользователей:
function wpmax_shortcode_logged_in( $atts, $content = null ) {
if ( is_user_logged_in() && ! is_null( $content ) && ! is_feed() ) {
return $content;
}
return '';
}
add_shortcode( 'logged_in', 'wpmax_shortcode_logged_in' );Использование в редакторе:
[logged_in]Добро пожаловать, зарегистрированный пользователь![/logged_in]Аналогично можно сделать для гостей или других условий, расширяя логику.
Плагины для условного вывода контента
Если хочется обойтись без кода, есть несколько полезных плагинов для условного контента:
- Content Control — позволяет скрывать или показывать блоки по ролям, статусу входа, устройствам.
- Conditional Blocks — расширяет редактор Gutenberg, добавляя блоки с условиями.
- WP Show Hide Content — простой шорткод на основе условий.
Например, с плагином Content Control можно создать правила показа блоков без программирования.
Пример решения: условный вывод блока с AJAX-загрузкой
Иногда нужно не просто показать или скрыть контент, а подгрузить его динамически. Ниже пример, как с помощью AJAX вывести разный контент по роли пользователя.
add_action( 'wp_enqueue_scripts', 'wpmax_enqueue_scripts' );
function wpmax_enqueue_scripts() {
wp_enqueue_script( 'wpmax-ajax-script', get_template_directory_uri() . '/js/wpmax-ajax.js', array('jquery'), null, true );
wp_localize_script( 'wpmax-ajax-script', 'wpmax_ajax_obj', array(
'ajax_url' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'wpmax_nonce' )
));
}
add_action( 'wp_ajax_wpmax_get_content', 'wpmax_get_content' );
add_action( 'wp_ajax_nopriv_wpmax_get_content', 'wpmax_get_content' );
function wpmax_get_content() {
check_ajax_referer( 'wpmax_nonce', 'nonce' );
if ( is_user_logged_in() ) {
wp_send_json_success( array( 'content' => 'Привет, зарегистрированный пользователь!' ) );
} else {
wp_send_json_success( array( 'content' => 'Пожалуйста, войдите, чтобы увидеть контент.' ) );
}
wp_die();
}В JavaScript (файл wpmax-ajax.js) нужно написать:
jQuery(document).ready(function($) {
$.post(wpmax_ajax_obj.ajax_url, {
action: 'wpmax_get_content',
nonce: wpmax_ajax_obj.nonce
}, function(response) {
if (response.success) {
$('#wpmax-conditional-content').html(response.data.content);
}
});
});И в шаблоне добавить <div id="wpmax-conditional-content"></div> — туда загрузится нужный контент.
Советы по организации условного контента
Чтобы не запутаться с большим количеством условий и не снижать производительность:
- Выносите логику в отдельные функции с префиксом, например,
wpmax_ - Используйте кеширование результатов, если условия сложные
- Минимизируйте количество условных запросов к базе и вычислений
- Для редактируемого контента применяйте шорткоды или плагины с визуальным интерфейсом
Так вы сохраните удобство поддержки и гибкость сайта.
Итог
Разделение контента на страницах WordPress по условиям — мощный инструмент для персонализации и оптимизации сайта. Вы можете решать задачи как через простые условные теги и шорткоды, так и с помощью AJAX и готовых плагинов. Главное — продумать логику и организовать код так, чтобы он был понятен и удобен для поддержки.