Как определить из скрипта плагина, использует ли активная тема тег <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>.
hakre
Вы никогда не можете быть уверены, но можете использовать эвристики, чтобы сделать обоснованное предположение. Вы говорите только о страницах отдельных записей или также о списках? Некоторые виджеты также выводят заголовки записей — я предполагаю, что боковые панели вас не интересуют?
Кроме того, вы не знаете, является ли заголовок, написанный в тегах <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() на основе этого результата? В таком случае вам не нужно знать его заранее.