Как определить из скрипта плагина, использует ли активная тема тег <h1> для заголовка записи
Моему плагину необходимо определить, использует ли текущая активная тема тег H1 для заголовка записи? Я ищу предложения по подходам к созданию скрипта, который мог бы это определить.
ОБНОВЛЕНИЕ: Плагин анализирует SEO-профиль содержимого записи, чтобы помочь пользователю улучшить ранжирование в поисковых системах. После заголовка записи, тег h1 является одним из самых важных тегов для SEO. Однако я не хочу просить пользователя включать основное ключевое слово в тег h1 в содержимом записи, если тема уже это делает (как это делают многие темы).

Отправить HTTP-запрос на страницу и найти в теле ответа </h1>
.
Смотрите этот Gist для примера.
Сохраните результат в опции и удалите эту опцию, когда пользователь сменит тему (используйте хук switch_theme
).

Плагин, который использует это - CSP WordPress Plugin - http://people.mozilla.org/~bsterne/content-security-policy/wordpress.html ; Скриншоты/Обзор: http://hakre.wordpress.com/2010/06/01/prevent-xss-on-your-wordpress-blog-with-csp/ -- Он выполняет ajax-запрос для выявления похожих вещей (источники изображений и скриптов), но это должно работать и с поиском тегов <h1>.

Вы никогда не можете быть уверены, но можете использовать эвристики, чтобы сделать обоснованное предположение. Вы говорите только о страницах отдельных записей или также о списках? Некоторые виджеты также выводят заголовки записей — я предполагаю, что боковые панели вас не интересуют?
Кроме того, вы не знаете, является ли заголовок, написанный в тегах <h1>
, заголовком записи. Если вы видите <h1>{$title}</h1>
, то это заголовок записи, название сайта или что-то совершенно другое?
Я бы упростил вопрос до следующего: содержит ли текущий основной файл шаблона (который подключается через template-loader.php
) конструкцию <h1>[что-то]title[что-то]</h1>
? Это охватит варианты вроде <h1>{$title}</h1>
, <h1><?php the_title(); ?></h1>
и другие распространённые шаблоны. Однако это может ошибочно сработать на закомментированных частях, например <!-- <h1>{$title}</h1> -->
. Такой подход не учитывает подключения через get_template_part()
— возможно, вы можете добавить это самостоятельно (но лёгкого хука для этого нет). Будьте осторожны с конструкциями типа <h1>Название сайта</h1> [контент] <h2>Заголовок записи</h2> [контент] <h1>Другой крупный заголовок</h1>
— вы не хотите их учитывать.
Общая идея заключается в подключении (позднем) к фильтру template_include
, чтобы узнать, какой файл шаблона будет использоваться. Проанализируйте этот файл, ища указанный выше шаблон. Если найдёте — установите переменную (изначально null
) в true
. Если нет — в false
. Кэшируйте результат, поскольку это, вероятно, ресурсоёмкая операция, а шаблон меняется не так часто.
Вы не узнаете результат до момента подключения шаблона, но, предполагаю, вы хотите изменить вывод the_title()
на основе этого результата? В таком случае вам не нужно знать его заранее.
