WPExperts

Как добавить динамические атрибуты к шорткодам WordPress

Шорткоды в WordPress — мощный инструмент для вставки динамического контента в страницы и записи. Но стандартные шорткоды зачастую используют статические параметры, которые приходится прописывать вручную. В этой статье мы разберём, как создать шорткод с динамическими атрибутами, которые позволят гибко изменять вывод в зависимости от контекста, пользователя или других условий.

Что такое динамические атрибуты в шорткодах WordPress

Динамические атрибуты — это параметры, значения которых не фиксированы, а формируются в момент выполнения кода. Это позволяет, например, передавать в шорткод не только статические значения, но и вычислять их программно, либо подставлять значения из запроса, пользовательских полей, метаданных и других источников.

Такой подход открывает дополнительные возможности для кастомизации и расширения функционала без необходимости создавать множество похожих шорткодов.

Рассмотрим пример: стандартный шорткод [wpexperts_user_info user="123"] выводит данные пользователя с ID 123. Что если сделать атрибут user динамическим — чтобы он подставлялся автоматически из текущей сессии или запроса?

Как создать шорткод с динамическими атрибутами: базовый пример

Начнём с простого примера, который демонстрирует, как в обработчике шорткода можно проверить наличие атрибута и подставить значение по умолчанию или вычисленное динамически.

function wpexperts_dynamic_shortcode($atts) {
    // Разбор атрибутов с указанием дефолтных значений
    $atts = shortcode_atts(array(
        'user' => null,
        'show_email' => 'no',
    ), $atts, 'wpexperts_user_info');

    // Если user не передан, берём ID текущего пользователя
    if (empty($atts['user'])) {
        $current_user = wp_get_current_user();
        if ($current_user->ID === 0) {
            return 'Пользователь не авторизован';
        }
        $atts['user'] = $current_user->ID;
    }

    $user_info = get_userdata($atts['user']);
    if (!$user_info) {
        return 'Пользователь не найден';
    }

    $output = '<div class="wpexperts-user-info">';
    $output .= '<p>Имя: ' . esc_html($user_info->display_name) . '</p>';

    if ($atts['show_email'] === 'yes') {
        $output .= '<p>Email: ' . esc_html($user_info->user_email) . '</p>';
    }

    $output .= '</div>';
    return $output;
}
add_shortcode('wpexperts_user_info', 'wpexperts_dynamic_shortcode');

В этом коде атрибут user можно передать явно, например [wpexperts_user_info user="5"], а можно не передавать — тогда будет использован ID текущего авторизованного пользователя. Так мы сделали динамическую подстановку параметра.

Динамические атрибуты из URL и других источников

Часто бывает нужно, чтобы шорткод брал параметры из URL или других глобальных источников, например, из $_GET или пользовательских полей.

Рассмотрим пример, когда в URL передаётся параметр ?product_id=42, и наш шорткод подставляет его автоматически, если атрибут не указан.

function wpexperts_product_info_shortcode($atts) {
    $atts = shortcode_atts(array(
        'id' => null,
    ), $atts, 'wpexperts_product_info');

    if (empty($atts['id']) && !empty($_GET['product_id'])) {
        $atts['id'] = intval($_GET['product_id']);
    }

    if (empty($atts['id'])) {
        return 'ID продукта не указан';
    }

    // Предположим, у вас есть кастомный тип записи 'product'
    $product = get_post($atts['id']);
    if (!$product || $product->post_type !== 'product') {
        return 'Продукт не найден';
    }

    $output = '<div class="wpexperts-product-info">';
    $output .= '<h2>' . esc_html($product->post_title) . '</h2>';
    $output .= '<p>' . esc_html($product->post_excerpt) . '</p>';
    $output .= '</div>';

    return $output;
}
add_shortcode('wpexperts_product_info', 'wpexperts_product_info_shortcode');

Такой подход удобен, если шорткод используется на разных страницах и должен автоматически подставлять контекстные данные.

Использование динамических атрибутов с плагином Clearfy Pro

Если на сайте установлен плагин Clearfy Pro, он поможет оптимизировать выполнение шорткодов и убрать лишние запросы. Например, Clearfy Pro позволяет кэшировать вывод шорткодов и ускорять загрузку страниц.

Вы можете обернуть шорткод в кэш с помощью функции Clearfy, что особенно полезно при динамических атрибутах, которые меняются нечасто:

function wpexperts_cached_shortcode($atts) {
    $cache_key = 'wpexerts_user_info_' . md5(serialize($atts));
    $cached = clearfy_get_cache($cache_key);
    if ($cached) {
        return $cached;
    }
    $output = wpexperts_dynamic_shortcode($atts);
    clearfy_set_cache($cache_key, $output, 3600); // кэш на 1 час
    return $output;
}
add_shortcode('wpexperts_user_info_cached', 'wpexerts_cached_shortcode');
<

Это пример, как расширить функциональность шорткода с динамическими атрибутами, сохраняя производительность.

Советы по безопасности при работе с динамическими атрибутами

При работе с динамическими атрибутами важно обезопасить сайт от XSS и SQL-инъекций. Всегда используйте функции экранирования, такие как esc_html(), esc_attr(), а для числовых значений — intval() или floatval().

Также не доверяйте напрямую данным из $_GET или $_POST — обязательно проверяйте и фильтруйте входящие данные.

Вот пример безопасной обработки:

function wpexperts_safe_shortcode($atts) {
    $atts = shortcode_atts(array('id' => 0), $atts);
    $id = intval($atts['id']);

    if ($id <= 0) {
        return 'Неверный ID';
    }

    // Вывод безопасных данных ...
}

Заключение

Использование динамических атрибутов в шорткодах позволяет создавать максимально гибкие и удобные инструменты для вывода контента в WordPress. Вы научились подставлять значения из текущего пользователя, URL или других источников, а также обеспечивать безопасность и производительность.

Для расширения возможностей рекомендуем ознакомиться с плагинами Clearfy Pro и WPGPT, которые помогут автоматизировать и ускорить работу с динамическими данными на сайте.

×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »