PHP для динамических страниц и разработки на WordPress

PHP для динамических страниц и разработки на WordPress

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
  )
);
?>

Экранирование вывода это отдельная история. В 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.

Источники и ссылки


Комментарии загружаются…