PHP это серверный язык, на котором написан WordPress: ядро, темы, плагины, работа с базой. Если вы правите тему, пишете свой плагин или просто хотите понимать, что происходит при открытии страницы, без базового PHP никуда. Ниже короткий обзор для тех, кто делает динамические страницы и пишет под WordPress: какие версии PHP живы в 2026 году, как устроен цикл записей, как ходить в базу без SQL-инъекций и как работать с формами и паролями.
Как PHP собирает страницу
PHP выполняется на сервере. Скрипт получает запрос, при необходимости идёт в базу, собирает HTML и отдаёт его браузеру. Обычная HTML-страница всегда одна и та же, а страница на PHP зависит от пользователя, параметров в адресе, сессии и данных в MySQL или MariaDB.
Язык появился в 1994 году у Расмуса Лердорфа как набор CGI-скриптов и вырос в экосистему, которую поддерживает почти любой хостинг. Плюсы понятные: низкий порог входа, PHP есть на любом shared-хостинге, огромное сообщество, зрелые расширения для баз, сессий, JSON и curl. Минусы тоже: на PHP легко написать небезопасный код с инъекциями и XSS, а качество старых проектов сильно зависит от того, кто их писал.
Какую версию PHP ставить в 2026 году
Каждая ветка PHP два года получает обычные исправления и ещё два года только исправления безопасности. По таблице поддерживаемых версий сейчас живы четыре ветки: 8.2 (безопасность до 31 декабря 2026), 8.3 (до 31 декабря 2027), 8.4 (до 31 декабря 2028) и 8.5, вышедшая 20 ноября 2025 года (до 31 декабря 2029). Всё, что ниже 8.2, уже без патчей, а 8.2 закончится в конце этого года.
WordPress в требованиях к хостингу рекомендует PHP 8.3 или новее, MariaDB 10.11+ или MySQL 8.0+ и HTTPS. Запустится он и на PHP 7.4, но такие версии давно без обновлений безопасности. На практике для нового сайта разумно брать 8.3 или 8.4 и заранее проверять тему и плагины на совместимость.
Роль PHP в WordPress
Когда вы открываете страницу WordPress, PHP поднимает окружение, читает настройки, идёт в базу, применяет фильтры и экшены, подключает шаблон темы и выводит HTML. Плагины и дочерние темы это в первую очередь PHP-файлы с хуками. Записи, метаполя и пользователи лежат в MySQL, а PHP достаёт их через API WordPress.
WP_Queryэто класс, а не функция: основной способ выбрать записи по условиям.$wpdbэто глобальный объект для прямых запросов к таблицам, с подготовленными запросами черезprepare().- Шаблоны темы:
header.php,single.php,page.phpи иерархия шаблонов. - Плагины цепляются к ядру через
add_actionиadd_filter.
Минимальный цикл записей в теме:
<?php
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
the_title( '<h1>', '</h1>' );
the_content();
endwhile;
endif;
?>
Свой запрос через WP_Query, например пять последних записей из рубрики news:
<?php
$q = new WP_Query( array(
'post_type' => 'post',
'posts_per_page' => 5,
'category_name' => 'news',
) );
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
the_title( '<h2>', '</h2>' );
}
wp_reset_postdata();
}
?>
Локальная среда и базовый синтаксис
Для разработки удобны Local, Docker, Laravel Herd, XAMPP или MAMP, либо связка Nginx или Apache с PHP-FPM и MariaDB. На боевом сервере веб-сервер должен отдавать файлы .php в PHP-FPM, а не показывать их как текст.
Код пишется внутри тегов <?php ... ?>. Переменные начинаются с $, массивы задаются через [] или array(), дальше обычные if/else, foreach, for, while. Функции дробят логику, классы помогают держать порядок в плагинах и больших темах.
<?php
$name = 'World';
$items = [ 'alpha', 'beta', 'gamma' ];
function greet( $who ) {
return 'Hello, ' . $who;
}
echo greet( $name );
foreach ( $items as $item ) {
echo $item . "\n";
}
?>
Регулярные выражения через preg_match() и preg_replace() пригодятся для проверки форматов и чистки строк. С файлами работают file_get_contents() и file_put_contents(). В WordPress для путей и загрузок лучше брать его API (wp_upload_dir, Filesystem API), а не собирать пути руками.
База данных без SQL-инъекций
В обычном PHP к MySQL подключаются через MySQLi или PDO. PDO универсальнее и работает с разными СУБД. Главное правило одно: пользовательский ввод не склеивают со строкой SQL, а передают через подготовленный запрос.
<?php $pdo = new PDO( 'mysql:host=localhost;dbname=app;charset=utf8mb4', 'user', 'pass', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ] ); $stmt = $pdo->prepare( 'SELECT id, title FROM posts WHERE id = ?' ); $stmt->execute( [ $id ] ); $row = $stmt->fetch( PDO::FETCH_ASSOC ); ?>
В WordPress то же самое делает $wpdb->prepare() с плейсхолдерами %d, %s, %f и %i для имён таблиц и полей. А если задачу решают get_posts, update_post_meta и другие функции ядра, свой SQL вообще не нужен.
<?php
global $wpdb;
$row = $wpdb->get_row(
$wpdb->prepare(
"SELECT ID, post_title FROM {$wpdb->posts} WHERE ID = %d",
$id
)
);
?>
wpdb::prepare() описаны все плейсхолдеры и то, как он экранирует значения перед запросом. Источник: developer.wordpress.org, wpdb::prepare().Экранирование вывода это отдельная история. В WordPress для этого есть esc_html, esc_attr и esc_url, вне WordPress htmlspecialchars.
Шаблоны и формы
Простейшая динамическая страница это HTML со вставками PHP. В WordPress разметку и логику разделяют иерархия шаблонов, get_template_part() и блоки. Twig и похожие шаблонизаторы живут в основном во фреймворках вроде Symfony, в обычных темах WordPress шаблоны пишут на PHP.
Форма отправляется методом POST, данные проверяются на сервере, и только потом сохраняются или уходят письмом. Без WordPress это выглядит так:
<?php
// form.html: <form method="post" action="handle.php">...
$email = filter_input( INPUT_POST, 'email', FILTER_VALIDATE_EMAIL );
if ( ! $email ) {
exit( 'Некорректный email' );
}
// дальше: сохранение, письмо, редирект
?>
В плагине для admin-post или AJAX добавляют nonce (check_admin_referer, wp_verify_nonce), проверку прав через current_user_can и чистку ввода (sanitize_text_field, sanitize_email).
Сессии, куки и пароли
Сессии (session_start(), $_SESSION) хранят состояние между запросами. Куки лежат на стороне браузера, и доверять им без проверки нельзя. У WordPress своя система пользователей и авторизационных кук, поэтому для своего входа лучше брать его API (wp_signon, роли и права), а не строить параллельную схему на сессиях.
Пароли хранят только в виде хеша. В PHP для этого есть password_hash() и password_verify():
<?php
$hash = password_hash( $password, PASSWORD_DEFAULT );
if ( password_verify( $password, $hash ) ) {
// пароль верный
}
?>
Чувствительные данные шифруют через libsodium или OpenSSL, а ключи не кладут в репозиторий. На хостинге нужны HTTPS, поддерживаемая версия PHP и минимум плагинов с сомнительным кодом.
Короткая памятка для WordPress-разработчика
- Свой код пишите в дочерней теме или плагине, а не в ядре и не в родительской теме из каталога.
- Меняйте поведение через хуки, а не правками файлов ядра.
- Свой SQL только через
$wpdb->prepare(). - Экранируйте вывод, HTML из админки пропускайте через
wp_ksesс понятным списком тегов. - Следите за версией PHP на хостинге: ветка без исправлений безопасности это риск.
- Для нового кода смотрите developer.wordpress.org, а не старый Codex.
Если нужна доработка темы, плагина или формы на уже работающем сайте, могу помочь: по прайс-листу доработки существующего сайта стоят от 5 000 ₽, ACF и свои блоки от 15 000 ₽.
В итоге PHP даёт серверную логику: база, формы, шаблоны, доступ. WordPress добавляет поверх него запросы через WP_Query, хуки, пользователей и экосистему тем и плагинов. Учить язык удобнее сразу вместе с безопасной работой с вводом и выводом и API WordPress, на поддерживаемой версии PHP 8.3 или 8.4.