Как запустить PHP функции через шорткод с обработкой параметров в WordPress

|

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

Что такое шорткод с вызовом PHP функции

Шорткод — это сокращённый тег в квадратных скобках, например, [my_shortcode], который WordPress заменяет на определённый контент или результат функции. При создании шорткода можно указать, какую PHP функцию нужно вызвать, и передать ей параметры, например, [my_shortcode param1="value1" param2="value2"].

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

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

Создание шорткода с передачей параметров — пошагово

Для примера создадим шорткод [wpzoom_run func="function_name" arg1="value1"], который будет вызывать внутри себя PHP функцию с переданными аргументами, и выводить результат.

Шаг 1. Регистрация шорткода

function wpzoom_shortcode_run_function($atts) {
    // Разбор параметров с установкой значений по умолчанию
    $atts = shortcode_atts(
        array(
            'func' => '',
            'arg1' => '',
            'arg2' => '',
        ), $atts, 'wpzoom_run'
    );

    $func = sanitize_text_field($atts['func']);
    $arg1 = sanitize_text_field($atts['arg1']);
    $arg2 = sanitize_text_field($atts['arg2']);

    // Проверяем, существует ли функция и разрешена ли к вызову
    $allowed_functions = array('wpzoom_test_function', 'wpzoom_another_function');
    if (!in_array($func, $allowed_functions) || !function_exists($func)) {
        return '<div style="color:red;">Ошибка: функция не найдена или вызов запрещён.</div>';
    }

    // Вызываем функцию с аргументами
    return call_user_func($func, $arg1, $arg2);
}
add_shortcode('wpzoom_run', 'wpzoom_shortcode_run_function');

Здесь мы реализовали фильтрацию параметров, проверку разрешённых функций для безопасности и вызов через call_user_func.

Шаг 2. Пример функций для вызова

function wpzoom_test_function($param1, $param2) {
    return 'Результат test_function: Param1=' . esc_html($param1) . ', Param2=' . esc_html($param2);
}

function wpzoom_another_function($param1, $param2) {
    return 'Другая функция получила: ' . esc_html($param1) . ' и ' . esc_html($param2);
}

Добавьте эти функции в файл functions.php или в свой плагин. Теперь можно использовать шорткод:

[wpzoom_run func="wpzoom_test_function" arg1="Привет" arg2="Мир"]

И на странице выведется:
Результат test_function: Param1=Привет, Param2=Мир

Безопасность вызова функций через шорткод

Важно не давать возможность запускать произвольные PHP функции через шорткод — это огромный риск для сайта. В нашем примере мы явно перечислили разрешённые функции в массиве $allowed_functions. Так можно контролировать, что именно можно вызвать.

Также нужно обязательно использовать функции очистки данных, например sanitize_text_field, и экранировать вывод через esc_html или аналогичные средства.

Если вы планируете более сложные функции с разными типами параметров, стоит дополнительно валидировать и фильтровать входящие значения, чтобы избежать SQL-инъекций или XSS-атак.

Расширение шорткода: динамическое количество параметров

В реальных задачах может понадобиться передавать переменное число параметров. Для этого можно передавать их в виде JSON или использовать все атрибуты, кроме func, динамически.

function wpzoom_shortcode_run_function_dynamic($atts) {
    $atts = shortcode_atts(array('func' => ''), $atts, 'wpzoom_run');
    $func = sanitize_text_field($atts['func']);

    $allowed_functions = array('wpzoom_test_function_dynamic');
    if (!in_array($func, $allowed_functions) || !function_exists($func)) {
        return '<div style="color:red;">Ошибка: функция не найдена или вызов запрещён.</div>';
    }

    // Удаляем ключ func из параметров
    unset($atts['func']);

    // Вызываем функцию, передавая все остальные параметры
    return call_user_func($func, $atts);
}
add_shortcode('wpzoom_run', 'wpzoom_shortcode_run_function_dynamic');

function wpzoom_test_function_dynamic($params) {
    $output = 'Получены параметры:<br>';
    foreach ($params as $key => $value) {
        $output .= esc_html($key) . ' = ' . esc_html($value) . '<br>';
    }
    return $output;
}

Теперь шорткод может выглядеть так:

[wpzoom_run func="wpzoom_test_function_dynamic" foo="bar" number="123"]

И функция выведет список всех переданных атрибутов.

Практические советы и рекомендации

Интеграция с плагинами WPShop

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

Плагин Expert Review можно использовать для создания интерактивных отзывов, которые также можно вывести через шорткод с параметрами.

WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов
30.06.2026
Как избежать проблем с вариациями товаров WooCommerce при массовом импорте
20.04.2026
Как автоматически отключать неиспользуемые плагины в WordPress
11.03.2026
Как использовать REST API в WordPress для создания простого плагина
15.11.2025
Как создать собственный шорткод в WordPress с примерами
01.11.2025
×
WPShop
партнерка без «но»!

До 3225₽ за каждую продажу

Подключиться к игре