Skip to content

Вопросы на собеседовании: WordPress-разработчик

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Junior WordPress-разработчик.

Смотреть пример резюме: WordPress-разработчик

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

wordpress

WordPress объединяет PHP-код приложения, базу данных, темы, плагины и загруженные медиафайлы для работы сайта.

  • Ядро WordPress отвечает за обработку запросов, админ-панель, API контента, пользователей и общие сервисы.
  • Тема управляет представлением, а плагины добавляют или изменяют поведение без правки ядра.
  • MySQL или MariaDB хранит контент и настройки, а wp-content/uploads обычно хранит медиафайлы.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы на базовом уровне разделять ядро, данные, представление, расширения и медиафайлы.

Эти три каталога разделяют администрирование, библиотеки ядра и принадлежащие сайту расширения и ресурсы.

  • wp-admin содержит файлы панели управления и административных запросов.
  • wp-includes содержит большинство функций, классов и встроенных библиотек ядра WordPress.
  • wp-content содержит темы, плагины и загрузки, поэтому пользовательский код должен находиться там, а не в каталогах ядра.

Зачем это спрашивают: Сильный ответ показывает, где должен находиться пользовательский код и почему файлы ядра нельзя считать кодом проекта для редактирования.

databasewordpress

WordPress хранит контент, пользователей, комментарии, связи таксономий и настройки в связанных таблицах базы данных.

  • wp_posts содержит записи, страницы, вложения и объекты пользовательских типов, а дополнительные поля находятся в wp_postmeta.
  • wp_terms и связанные таблицы таксономий представляют рубрики, метки и пользовательские таксономии.
  • wp_options хранит общие настройки сайта, а wp_users и wp_usermeta хранят учетные записи и данные пользователей.

Зачем это спрашивают: Интервьюер проверяет понимание общей модели данных, на которой основаны типичные сущности WordPress.

wordpress

WordPress загружает окружение, разбирает URL, выполняет главный запрос, выбирает шаблон и отправляет готовый ответ.

  • Правила перезаписи превращают понятный URL в переменные запроса, описывающие нужный контент.
  • WordPress создает главный WP_Query и устанавливает условный контекст, например is_page() или is_archive().
  • Загрузчик шаблонов следует иерархии активной темы, а PHP и шаблонные теги формируют HTML-ответ.

Зачем это спрашивают: Интервьюер оценивает концептуальное понимание жизненного цикла запроса, а не знание каждого файла ядра.

indexeswordpress

Корневой index.php служит фронт-контроллером, который запускает WordPress для обычных запросов к публичной части.

  • Правила веб-сервера направляют множество публичных URL в эту единую точку входа.
  • Файл загружает wp-blog-header.php, который инициализирует WordPress и запускает вывод шаблона.
  • В теме тоже есть index.php, но это последний запасной классический шаблон, а не точка входа приложения.

Зачем это спрашивают: Сильный ответ отличает корневой фронт-контроллер от запасного шаблона классической темы.

querieswordpress

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

  • Запрос может преобразоваться в значения post_type, name, page_id, category_name или paged.
  • WP_Query читает эти значения, строит главный запрос к базе и устанавливает контекст запроса.
  • Публичные пользовательские переменные можно добавить фильтром query_vars, когда они действительно нужны функции сайта.

Зачем это спрашивают: Интервьюер проверяет, можете ли вы связать разбор URL с главным запросом контента.

themeswordpress

Минимальной классической теме нужны style.css и index.php, чтобы WordPress распознал ее и смог вывести контент.

  • style.css содержит заголовок темы с полями вроде Theme Name и также может содержать стили.
  • index.php служит запасным вариантом, если более подходящего шаблона нет.
  • В реальной теме для удобства поддержки обычно также есть functions.php, header.php, footer.php и специальные шаблоны иерархии.

Зачем это спрашивают: Интервьюер проверяет минимальный контракт классической темы и знание обычных вспомогательных файлов.

themeswordpress

Иерархия шаблонов представляет порядок файлов темы, которые WordPress проверяет для текущего запроса.

  • Для отдельной записи подходят single-{post-type}-{slug}.php, single-{post-type}.php, single.php, singular.php, а затем index.php.
  • Более точные файлы позволяют настроить конкретный контекст без множества условий в одном универсальном шаблоне.
  • В классической теме иерархия заканчивается index.php, поэтому запрос выводится даже без специальных файлов.

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

themeswordpress

Условные теги сообщают, какой тип запроса определил WordPress, чтобы тема могла выбрать подходящий для контекста вывод.

  • Функции is_front_page(), is_single() и is_archive() возвращают логические значения для распространенных типов запросов.
  • Они проверяют сформированный контекст запроса, поэтому большинство из них нужно использовать только после выполнения главного запроса WordPress.
  • Я использую их для небольших различий, а для полностью другой разметки предпочитаю иерархию шаблонов.

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

front-page.php отвечает за главную страницу сайта, а home.php отвечает за страницу списка записей.

  • Если главной назначена статическая страница, ее может выводить front-page.php.
  • Если для записей назначена другая страница, список блога на ней выводит home.php.
  • Когда главная показывает последние записи, front-page.php имеет приоритет над home.php, если существуют оба файла.

Зачем это спрашивают: Интервьюер проверяет часто путаемую часть иерархии шаблонов.

single.php обрабатывает отдельные записи, page.php обрабатывает Страницы, а singular.php может быть их общим запасным шаблоном.

  • Обычная запись блога попадает в single.php после проверки более точных шаблонов single.
  • Страница проходит через пользовательские и специальные шаблоны страниц перед page.php.
  • singular.php проверяется, когда для отдельной записи, страницы или пользовательского типа нет более точного шаблона.

Зачем это спрашивают: Сильный ответ связывает каждый файл с контекстом запроса и знает общий запасной шаблон singular.

wordpress

WordPress выбирает шаблоны по типу архива, а затем переходит к запасным archive.php и index.php.

  • category.php, tag.php и taxonomy.php обслуживают архивы встроенных и пользовательских терминов, также доступны более точные варианты.
  • author.php и date.php обслуживают архивы по автору и дате.
  • archive-{post_type}.php обслуживает архив пользовательского типа записей, если для типа включен архив.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы выбрать архивный шаблон без множества несвязанных условий в одном файле.

themes

Дочерняя тема наследует родительскую тему и хранит изменения отдельно от ее обновлений.

  • Ее style.css указывает каталог родителя в поле Template заголовка.
  • Ее шаблоны могут переопределять соответствующие шаблоны родителя, а functions.php загружается в дополнение к родительскому файлу.
  • Я использую ее для настройки поддерживаемой сторонней темы, но независимое от темы поведение выношу в плагин.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы сохранять изменения при обновлениях и правильно разделять представление и поведение.

themes

Я использую функции загрузки шаблонов WordPress вместо копирования общей разметки между файлами.

  • get_header(), get_footer() и get_sidebar() загружают соответствующие части темы.
  • get_template_part() загружает повторно используемые части вроде content-card.php и поддерживает именованные варианты.
  • Эти функции позволяют дочерним темам переопределять части и дают плагинам штатные хуки жизненного цикла загрузки.

Зачем это спрашивают: Сильный ответ называет стандартные API и объясняет, почему прямое подключение файлов менее гибкое.

wordpressthe-loop

Цикл перебирает записи из текущего WP_Query и по очереди устанавливает каждую текущей записью.

  • have_posts() проверяет наличие следующего результата, а the_post() переходит к нему.
  • Внутри цикла шаблонные теги the_title(), the_content() и the_permalink() используют контекст текущей записи.
  • Главный цикл темы обычно выводит контент, который WordPress выбрал для данного запроса.

Зачем это спрашивают: Интервьюер проверяет понимание главной связи между результатами WP_Query и шаблонными тегами.

the-loop

the_post() продвигает запрос и подготавливает глобальные данные записи для шаблонных тегов.

  • have_posts() только проверяет наличие следующего результата и не двигает указатель запроса.
  • the_post() заставляет функции вроде the_title() обращаться к текущему результату.
  • Без него цикл может застрять, а шаблонные теги могут читать устаревший контекст.

Зачем это спрашивают: Сильный ответ отличает проверку состояния итерации от перехода вперед и установки контекста записи.

Я вызываю wp_reset_postdata() после дополнительного цикла WP_Query, в котором использовался the_post().

  • Пользовательский цикл меняет глобальную переменную $post, которую используют многие шаблонные теги.
  • Сброс восстанавливает текущую запись главного запроса, чтобы последующие теги показали ожидаемый контент.
  • wp_reset_query() выполняет более широкий сброс и обычно не нужен для обычного дополнительного WP_Query.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы не допускать утечки контекста дополнительного цикла в остальную часть шаблона.

wordpresshooks

Хуки представляют именованные точки расширения, которые позволяют запускать код или менять значения без правки ядра WordPress.

  • Действия уведомляют функции обратного вызова о наступлении события или этапа.
  • Фильтры передают значение через функции обратного вызова и используют возвращенный результат.
  • Плагины и темы регистрируют функции через add_action() или add_filter(), сохраняя слабую связанность с ядром.

Зачем это спрашивают: Интервьюер проверяет понимание механизма расширения, на котором основана настройка WordPress.

wordpresshooks

Действие выполняет работу в точке хука, а фильтр получает значение и обязан вернуть итоговое значение.

  • Функция действия может зарегистрировать тип записи на init или вывести разметку в wp_footer.
  • Функция фильтра может изменить excerpt_length или заголовок перед выводом.
  • Если забыть вернуть значение из фильтра, оно может стать null и нарушить дальнейшую работу.

Зачем это спрашивают: Сильный ответ приводит конкретные применения и называет требование фильтра возвращать значение.

hooks

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

  • Меньшее число приоритета выполняется раньше, а при одинаковом приоритете действует порядок регистрации.
  • Приоритет по умолчанию равен 10 и обычно подходит, если особый порядок не требуется.
  • Четвертый параметр должен соответствовать числу передаваемых значений, которые функция собирается принять.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы зарегистрировать функцию с правильным моментом выполнения и сигнатурой.

Закрытые вопросы

  • 21

    Когда может понадобиться удалить функцию из хука WordPress?

    wordpresshookscallbacks
  • 22

    Какой код должен находиться в functions.php классической темы?

    themes
  • 23

    Какова базовая структура плагина WordPress?

    wordpressplugins
  • 24

    Для чего нужен заголовок плагина?

    plugins
  • 25

    Что должны делать хуки активации и деактивации?

    activationhooks
  • 26

    Как плагин должен удалять сохраненные данные при удалении?

    plugins
  • 27

    Зачем добавлять префиксы или пространства имен функциям, классам и константам плагина?

    pluginskubernetes
  • 28

    Что такое пользовательский тип записей?

    cpt
  • 29

    Когда и как нужно регистрировать пользовательский тип записей?

    cpt
  • 30

    Что такое пользовательская таксономия?

    taxonomies
  • 31

    Когда использовать метаданные записи, а когда настройку option?

  • 32

    Какие типы данных PHP часто используются в коде WordPress?

    wordpress
  • 33

    Как область видимости переменных влияет на PHP-код WordPress?

    wordpressscope
  • 34

    Что такое WP_Error и как его обрабатывать?

  • 35

    Как тема или плагин должны загружать CSS и JavaScript?

    cssthemesjavascript
  • 36

    Что означают зависимости, версия и стратегия загрузки при подключении скрипта?

    assetsdependencies
  • 37

    Как передать созданные на сервере данные в подключенный JavaScript-файл?

    assetsjavascript
  • 38

    Как создать простой пользовательский запрос через WP_Query?

    querieswp-query
  • 39

    Как вывести и правильно завершить дополнительный WP_Query?

    wp-query
  • 40

    Как правильно изменить главный запрос WordPress?

    querieswordpress
  • 41

    Чем отличаются санитизация, валидация и экранирование данных?

    validationescaping
  • 42

    Какие функции санитизации WordPress подходят для типичных полей формы?

    formsvalidationwordpress
  • 43

    Как выбрать правильную функцию экранирования в WordPress?

    escapingwordpress
  • 44

    Что такое nonce WordPress и от чего он защищает?

    noncewordpress
  • 45

    Как проверить, может ли пользователь WordPress выполнить действие?

    wordpress
  • 46

    Как безопасно выполнить пользовательский SQL-запрос через $wpdb?

    sqlquerieswpdb
  • 47

    Что такое блок в современном WordPress?

    wordpress
  • 48

    Чем блочная тема отличается от классической темы?

    themesblock-themes
  • 49

    Что пользователь может редактировать в Редакторе сайта WordPress?

    block-themeswordpress
  • 50

    Для чего используется theme.json?

    themesblock-themes
  • 51

    Как бы вы безопасно реализовали шорткод [team_member], принимающий ID сотрудника?

    shortcodes
  • 52

    Как бы вы добавили шорткоду атрибуты макета и цвета, не разрешая произвольные HTML и CSS?

    cssshortcodes
  • 53

    Как бы вы загружали CSS шорткода только на страницах, где он используется?

    cssshortcodes
  • 54

    Как бы вы добавили небольшой виджет контактов в боковую панель классической темы?

    themeswidgets
  • 55

    Как бы вы заменили простой устаревший виджет современным решением, удобным для редакторов?

    widgets
  • 56

    Как бы вы реализовали публичный тип записей Portfolio с категориями проектов?

    cpt
  • 57

    Как бы вы сделали отдельные макеты записи, архива и таксономии для Portfolio в классической теме?

    themestaxonomies
  • 58

    Как бы вы исследовали ошибку 404 на страницах Portfolio после смены rewrite slug типа записей?

    cpt
  • 59

    Как бы вы реализовали и безопасно сохраняли метабокс «URL клиента» для записей Portfolio?

  • 60

    Как бы вы создали группу полей ACF Pro для переиспользуемой карточки проекта и безопасно применили ее в теме?

    themes
  • 61

    Как бы вы обновили существующие метаданные Portfolio через WP CLI, не загружая все записи одновременно?

  • 62

    Как бы вы реализовали постраничный список «Последние проекты» через дополнительный WP_Query?

    wp-query
  • 63

    Как бы вы исправили повторяющиеся или пропавшие элементы, если постраничный WP_Query также использует offset?

    wp-query
  • 64

    Как бы вы показывали по двенадцать записей Portfolio в архиве категории проектов, не затрагивая списки админки и другие запросы?

    queries
  • 65

    Как бы вы исправили заголовок страницы, который после пользовательского цикла меняется на название последнего проекта?

  • 66

    Как бы вы исследовали ситуацию, когда скрипт плагина поставлен в очередь, но отсутствует в готовой странице?

    assetsplugins
  • 67

    Как бы вы диагностировали двойную загрузку одной библиотеки JavaScript на странице WordPress?

    wordpressjavascript
  • 68

    Как бы вы загружали скрипт галереи только на экране редактирования Portfolio в wp-admin?

  • 69

    Как бы вы исправили фронтенд-скрипт, запускающийся раньше своей зависимости или целевой разметки?

    dependencies
  • 70

    Как бы вы исправили тип записей, зарегистрированный слишком поздно для корректной работы архива и редактора?

    cpt
  • 71

    Как бы вы исправили фильтр the_content, из-за которого пропадает содержимое записи?

    hooks
  • 72

    Как бы вы заменили callback родительской темы, уже подключенный к wp_footer?

    themescallbacks
  • 73

    Как бы вы исследовали белый экран, появившийся после редактирования functions.php?

    themes
  • 74

    Как бы вы исследовали предупреждения PHP в debug.log, не показывая их посетителям?

  • 75

    Как бы вы определили, какой плагин ломает блочный редактор на локальной копии сайта?

    gutenbergplugins
  • 76

    Как бы вы изменили макет отдельной записи родительской темы так, чтобы обновления не стирали правку?

    themes
  • 77

    Как бы вы изменили макет отдельного товара WooCommerce без редактирования файлов плагина?

    pluginswoocommerce
  • 78

    Как бы вы реализовали фронтенд-форму обратной связи в плагине от отправки до подтверждения?

    formsplugins
  • 79

    Как бы вы возвращали полезные ошибки валидации из пользовательской формы настроек, не доверяя отправленным значениям?

    formsvalidation
  • 80

    Как бы вы защитили административное действие, удаляющее сохраненную заметку Portfolio?

  • 81

    Как бы вы исправили шаблон, который экранирует данные только при сохранении, но выводит их без обработки в ссылках и атрибутах?

    escaping
  • 82

    Как бы вы реализовали AJAX-кнопку «Загрузить еще проекты» для посетителей?

    ajax
  • 83

    Как бы вы добавили небольшой endpoint REST API, позволяющий авторизованным редакторам менять статус Portfolio?

    restendpoints
  • 84

    Как бы вы безопасно запросили из пользовательской таблицы плагина заказы, созданные после отправленной даты?

    queriesplugins
  • 85

    Как бы вы вставили строку в пользовательскую таблицу и обработали ошибку базы данных?

    database
  • 86

    Как бы вы сократили лишние запросы к базе в шаблоне, выводящем двадцать карточек проектов?

    databasequeries
  • 87

    Как бы вы кэшировали дорогой ответ внешнего API для виджета консоли WordPress?

    widgetsapicaching
  • 88

    Как бы вы поддерживали актуальность списка Portfolio в transient после изменений редакторов?

    caching
  • 89

    Как бы вы через WP CLI проверили, активны ли плагин и его запланированная задача?

    plugins
  • 90

    Как бы вы подготовили исправление дочерней темы в Git для безопасного ревью другим разработчиком?

    themesgit
  • 91

    Как бы вы исправили сетку проектов из трех колонок, выходящую за экран на телефонах?

    gridschema
  • 92

    Как бы вы организовали и собирали Sass для пользовательской темы, не публикуя случайно source map или дублированный CSS?

    cssthemessource-maps
  • 93

    Как бы вы исправили изменение шаблона блочной темы, которое работает в Site Editor, но не появляется после развертывания файлов темы на другом сайте?

    themesblock-themesdeployment
  • 94

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

    themesblock-themes
  • 95

    Как бы вы дали редакторам готовую секцию с отзывом, которую можно вставлять и редактировать?

  • 96

    Как бы вы настроили Query Loop в блочной теме для вывода шести последних записей Portfolio карточками?

    themesblock-themesqueries
  • 97

    Как бы вы добавили контролируемую фирменную палитру в блочную тему и убрали произвольный выбор цветов?

    formsthemesblock-themes
  • 98

    Как бы вы применили адаптивную шкалу типографики к заголовкам через theme.json?

    responsivethemesblock-themes
  • 99

    Как бы вы стандартизировали интервалы секций в блочной теме без пользовательских классов на каждом блоке Group?

    themesblock-themes
  • 100

    Как бы вы реализовали простой динамический блок Gutenberg, показывающий имя клиента текущей записи Portfolio?

    gutenberg