Допускаю, что я вообще неверно решил задачу, и буду признателен за правильный подход.
Задача:
1) есть страница /aaa/ , на ней список элементов ( элементы - не посты);
2) у каждого элемента есть детальная страница /aaa/[a-z]+/ . Глубже иерархии нет;
3) для несуществующих элементов надо показывать 404 со статусом 404.
Как сделано:
1) в текущую тему добавлен шаблон template-aaa.php.
2) в шаблоне в нужной части используется экземпляр класса из самописного плагина:
<?php
$publicArea = new MyPlugin\PublicArea();
$publicArea->show();
3) в админке создана страница с ярлыком aaa , ей назначен шаблон template-aaa.php
Теперь плагин:
плагин использует хуки:
init - для add_rewrite_tag() , add_rewrite_rule()
query_vars - как парный к add_rewrite_tag()
get_header - здесь висит метод, который через get_query_var() понимает, что запросили детальную страницу элемента, получает данные элемента. Если не получилось - отрабатывает такой код:
<?php
global $wp_query;
$wp_query->set_404();
status_header(404);
И ещё есть всякие второстепенные хуки, типа get_canonical_url - считаю, что о них не нужно говорить в контексте вопроса.
Каков итог:
При HEAD запросе для несуществующего элемента возвращается статус 200. При GET запросе возвращается статус 404, как и должно быть.
Что нужно исправить, чтобы и для HEAD запроса был статус 404 ?