Как определить из скрипта плагина, использует ли активная тема тег <h1> для заголовка записи

8 нояб. 2010 г., 23:26:35
Просмотры: 308
Голосов: 1

Моему плагину необходимо определить, использует ли текущая активная тема тег H1 для заголовка записи? Я ищу предложения по подходам к созданию скрипта, который мог бы это определить.

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

3
Комментарии

Мне кажется, вопрос слишком общий. Тема может содержать множество файлов, в некоторых из них может быть <h1>{$title}</h1>, а в других — нет. И что именно пытается сделать ваш плагин? Более подробное описание сценария использования помогло бы нам дать вам более точный ответ.

MikeSchinkel MikeSchinkel
9 нояб. 2010 г. 09:54:44

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

t31os t31os
9 нояб. 2010 г. 16:56:11

Привет, ребята, извините, что оставил это без комментариев! Я обновил вопрос с дополнительными деталями.

Scott B Scott B
12 нояб. 2010 г. 22:51:47
Все ответы на вопрос 2
2

Отправить HTTP-запрос на страницу и найти в теле ответа </h1>. Смотрите этот Gist для примера.

Сохраните результат в опции и удалите эту опцию, когда пользователь сменит тему (используйте хук switch_theme).

9 нояб. 2010 г. 16:37:58
Комментарии

Плагин, который использует это - 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 hakre
9 нояб. 2010 г. 20:16:13

Блестяще в своей простоте.

Jan Fabry Jan Fabry
9 нояб. 2010 г. 22:52:11
0

Вы никогда не можете быть уверены, но можете использовать эвристики, чтобы сделать обоснованное предположение. Вы говорите только о страницах отдельных записей или также о списках? Некоторые виджеты также выводят заголовки записей — я предполагаю, что боковые панели вас не интересуют?

Кроме того, вы не знаете, является ли заголовок, написанный в тегах &lt;h1&gt;, заголовком записи. Если вы видите &lt;h1&gt;{$title}&lt;/h1&gt;, то это заголовок записи, название сайта или что-то совершенно другое?

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

Общая идея заключается в подключении (позднем) к фильтру template_include, чтобы узнать, какой файл шаблона будет использоваться. Проанализируйте этот файл, ища указанный выше шаблон. Если найдёте — установите переменную (изначально null) в true. Если нет — в false. Кэшируйте результат, поскольку это, вероятно, ресурсоёмкая операция, а шаблон меняется не так часто.

Вы не узнаете результат до момента подключения шаблона, но, предполагаю, вы хотите изменить вывод the_title() на основе этого результата? В таком случае вам не нужно знать его заранее.

9 нояб. 2010 г. 15:58:01