WordPress PHP функции: варианты реализации и типовые сценарии

Раздел: PHP -> CMS WordPress

Функции WordPress на PHP: назначение и варианты использования

Как эффективно создавать и использовать собственные функции в WordPress?

Наиболее эффективный подход - добавление пользовательских функций в файл functions.php активной темы с последующей привязкой к хукам через add_action() или add_filter(). Это позволяет модифицировать ядро системы без изменения его исходного кода.


// Добавление пользовательской функции в functions.php
function my_theme_setup() {
    add_theme_support('post-thumbnails');
    register_nav_menus(array('primary' => 'Основное меню'));
}
add_action('after_setup_theme', 'my_theme_setup');

Пояснение: функция my_theme_setup() регистрирует поддержку миниатюр и меню, а хук after_setup_theme гарантирует выполнение после загрузки темы. Такой подход сохраняет изменения при обновлении темы.

Типичная ошибка: вызов функции до её определения. Решение: проверять существование функции с function_exists() или использовать классы/пространства имён.

Как организовать функции в отдельных файлах для улучшения читаемости?

Создание отдельных файлов в папке /inc/ и подключение через require_once внутри functions.php.


// functions.php
require_once get_template_directory() . '/inc/customizer.php';
require_once get_template_directory() . '/inc/shortcodes.php';

Каждый файл содержит функции для своей области. Это упрощает поддержку и повторное использование кода.

Проблема: дублирование путей при неправильном указании. Решение: использовать get_template_directory() или get_stylesheet_directory() для дочерних тем.

Как избежать конфликтов имён при большом количестве функций?

Использование классов для группировки связанных функций. Пример класса для работы с метабоксами:


class Custom_Meta_Box {
    public function __construct() {
        add_action('add_meta_boxes', array($this, 'add_custom_box'));
        add_action('save_post', array($this, 'save_box_data'));
    }

    public function add_custom_box() {
        add_meta_box('custom_box_id', 'Дополнительные данные', array($this, 'render_box'), 'post');
    }

    public function render_box($post) {
        // вывод полей
    }

    public function save_box_data($post_id) {
        // сохранение
    }
}
new Custom_Meta_Box();

Класс инкапсулирует логику и предотвращает глобальное загрязнение пространства имён.

Ошибка: вызов методов до инициализации объекта. Решение: создавать экземпляр сразу после определения класса или использовать синглтон.

Как использовать анонимные функции (замыкания) в качестве обработчиков хуков?

Анонимные функции удобны для простых одноразовых задач. Пример добавления CSS из плагина:


add_action('wp_enqueue_scripts', function() {
    wp_enqueue_style('my-plugin-style', plugin_dir_url(__FILE__) . 'style.css');
});

Не требуется именовать функцию, но такие замыкания нельзя удалить через remove_action() без сохранения ссылки.

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

Как добавлять функции без редактирования темы (для пользователей без доступа к FTP)?

Плагин Code Snippets позволяет вставлять PHP-код через админпанель. Пример сниппета для вывода уведомлений:


add_action('wp_body_open', function() {
    echo '
Добро пожаловать!
'; });

Сниппет можно активировать/деактивировать без FTP. Это безопасно для начинающих.

Ошибка: синтаксическая ошибка в сниппете может «уронить» сайт. Решение: всегда активировать сниппет после проверки через локальное тестирование.

Примеры расширенного использования функций WordPress на PHP с кодом и результатами.

Пример

// 1. Фильтрация контента: замена слов в записях
function replace_words($content) {
    $search = array('старая', 'плохая');
    $replace = array('новая', 'отличная');
    return str_replace($search, $replace, $content);
}
add_filter('the_content', 'replace_words');
Результат: при выводе записи слово “старая” заменяется на “новая”, “плохая” на “отличная”. Фильтр применяется ко всем записям.
Пример

// 2. Добавление шорткода: [year] для отображения текущего года
function year_shortcode() {
    return date('Y');
}
add_shortcode('year', 'year_shortcode');
Использование в редакторе: [year] → 2025 (текущий год).
Пример

// 3. REST API: добавление нового поля в ответе пользователя
function add_user_avatar($response, $user, $request) {
    $response->data['avatar'] = get_avatar_url($user->ID);
    return $response;
}
add_filter('rest_prepare_user', 'add_user_avatar', 10, 3);
GET /wp/v2/users/1 вернёт JSON с полем “avatar”: “http://…”.
Пример

// 4. Создание кастомной страницы настроек плагина
function my_plugin_settings_page() {
    add_options_page('Настройки плагина', 'Мой плагин', 'manage_options', 'my-plugin', 'my_plugin_render');
}
add_action('admin_menu', 'my_plugin_settings_page');

function my_plugin_render() {
    echo '

Настройки

'; settings_fields('my_plugin_options'); do_settings_sections('my_plugin'); submit_button(); echo '
'; }
Появляется страница “Мой плагин” в меню Настройки, где можно сохранить опции плагина.
Пример

// 5. Кеширование результатов функции с помощью транзиентов
function get_expensive_data() {
    $data = get_transient('my_expensive_data');
    if (false === $data) {
        $data = some_heavy_computation();
        set_transient('my_expensive_data', $data, HOUR_IN_SECONDS);
    }
    return $data;
}
Функция вычисляет данные один раз и кэширует на час, снижая нагрузку на сервер.
Пример

// 6. Динамическое добавление кастомных типов записей через функцию
function create_product_post_type() {
    register_post_type('product',
        array(
            'labels' => array('name' => 'Товары'),
            'public' => true,
            'menu_icon' => 'dashicons-cart',
            'supports' => array('title', 'editor', 'thumbnail')
        )
    );
}
add_action('init', 'create_product_post_type');
В админпанели появляется пункт “Товары”, записи этого типа доступны на сайте.
Пример

// 7. Использование пространства имён для функций в плагине
namespace MyPlugin;

function init() {
    add_action('wp_enqueue_scripts', __NAMESPACE__ . '\\enqueue_assets');
}

function enqueue_assets() {
    wp_enqueue_style('my-plugin-style', plugin_dir_url(__FILE__) . 'style.css');
}

add_action('plugins_loaded', __NAMESPACE__ . '\\init');
Пространство имён MyPlugin предотвращает конфликты с функциями других плагинов или темы.
- Admin pages php (страницы админки на php)
- Wp themes php (темы wordpress на php)
- Function php wp (функции wordpress php)
- Php woocommerce content (работа с контентом woocommerce в php)

функции WordPress PHP - comments

En
Function php wp (php)