Коротко: «PHP-код в PHP-коде» — это вывод разметки из PHP-файла и вставка PHP внутрь HTML. Делают так: закрывают ?>, пишут HTML, снова открывают <?php, либо используют echo, <?= ?>, heredoc/nowdoc. Главное — не терять открывающие и закрывающие теги и не путать кавычки.
Способы вывести разметку
| Способ | Когда |
|---|---|
?> HTML <?php |
много статичной разметки |
echo |
короткий вывод в одну строку |
<?= $var ?> |
короткая печать переменной |
| Heredoc/Nowdoc | большие многострочные строки |
Вкладки: примеры
<?php $title = 'Заголовок'; ?>
<h1><?php echo esc_html($title); ?></h1>
<p>Обычный текст.</p>
<?php if (have_posts()) : ?>
<p>Записи есть</p>
<?php endif; ?>Файл «открывается» PHP-режимом, затем HTML идёт «как есть», а логика включается блоками. Такой стиль используется во всех темах WordPress.
<?php
echo '<div class="card">';
echo esc_html($title);
echo '</div>';
?>Многострочный HTML удобнее держать вне PHP — читается лучше. Но для коротких вставок echo вполне подходит.
// двойные кавычки подставляют переменные
echo "Привет, $name!";
// фигурные скобки — для сложных выражений
echo "Привет, {$user->name}!";
// одинарные кавычки не подставляют
echo 'Привет, $name!'; // выведет как естьРазница кавычек — классическая ошибка новичков. Также помните: при выводе данных обязательно экранируйте (в WordPress — esc_html(), esc_attr(), esc_url()).
$html = <<<HTML
<div class="card">
<h2>{$title}</h2>
</div>
HTML;
echo $html;Heredoc удобен для больших блоков с переменными. Nowdoc (<<<'HTML') не подставляет переменные. Закрывающий идентификатор — без отступа по правилам.
esc_*.Практика: чистое смешивание
- Логику и подготовку данных — в начале файла.
- Разметку — отдельно, с короткими вставками
<?php ?>. - Не открывайте и не закрывайте PHP «на каждой строке» без нужды.
- Экранируйте вывод всегда, когда вставляете данные.
- Повторяющиеся блоки выносите в части шаблона.
Частые ошибки: причина → решение
| Симптом | Причина | Решение |
|---|---|---|
| Ошибка синтаксиса | потерян <?php или ?> |
проверить границы |
| Переменная не подставилась | одинарные кавычки | двойные кавычки |
| Нарушена вёрстка | лишние пробелы из-за ?> |
убрать перенос сразу после закрытия |
| Уязвимость XSS | нет экранирования | esc_html() и др. |
Проверьте себя
Вопросы и ответы
Это короткая запись <?php echo ?>. Удобно для одной переменной в разметке.
Новый перевод строки выводится как пробел и может сломать заголовки (ошибка «headers already sent»). В конце чисто PHP-файла закрывающий тег вообще не ставят.
Когда нужно вывести большой многострочный фрагмент со подстановкой переменных, а обычный echo с кавычками выглядит громоздко.
Используйте альтернативный синтаксис (if(): ... endif;) и редактор с подсветкой парных скобок.
Итоги
- Переключение режимов:
?>HTML<?php. - Двойные кавычки подставляют переменные, одинарные — нет.
- Heredoc — для больших блоков; nowdoc — без подстановки.
- Всегда экранируйте вывод данных.

Комментарии
Пока комментариев нет — будьте первым, кто поделится мнением.