Cómo determinar, desde un script de plugin, si el tema activo tiene <h1>El título de la publicación</h1>
Mi plugin necesita saber si el tema actualmente activo coloca el título de la publicación en etiquetas de encabezado H1. Busco sugerencias sobre enfoques para crear un script que pueda discernir esto.
ACTUALIZACIÓN: El plugin evalúa el perfil SEO del contenido de la publicación para ayudar al usuario a realizar mejoras en el posicionamiento en buscadores. Después del título de la publicación, la etiqueta h1 es una de las más importantes para SEO. Sin embargo, no quiero pedir al usuario que incluya su palabra clave principal en una etiqueta h1 en el contenido de la publicación si el tema ya lo hace (como muchos lo hacen).

Enviar una solicitud HTTP a la página y buscar en el cuerpo de la respuesta el código </h1>
.
Consulta este Gist para ver un ejemplo.
Almacena el resultado en una opción y elimina esta opción cuando el usuario cambie de tema (utiliza el hook switch_theme
).

Un plugin que hace uso de esto es el CSP WordPress Plugin - http://people.mozilla.org/~bsterne/content-security-policy/wordpress.html ; Capturas de pantalla/Reseña: http://hakre.wordpress.com/2010/06/01/prevent-xss-on-your-wordpress-blog-with-csp/ -- Hace una solicitud ajax para determinar cosas similares (fuentes de imágenes y scripts), pero eso también debería funcionar buscando etiquetas <h1>.

Nunca puedes estar completamente seguro, pero puedes usar heurísticas para hacer una suposición educada. ¿Estás hablando solo de páginas de entradas individuales o también de listados? Algunos widgets también muestran títulos de entradas, supongo que no te importan las barras laterales.
Además, no sabes si es el título el que está escrito dentro de etiquetas <h1>
. Si ves <h1>{$title}</h1>
, ¿es el título de la entrada, el nombre del sitio o algo completamente diferente?
Simplificaría la pregunta a esto: ¿el archivo de plantilla principal actual (que está incluido por template-loader.php
) contiene <h1>[algún texto]title[algún texto]</h1>
? Esto cubriría <h1>{$title}</h1>
, <h1><?php the_title(); ?></h1>
y otros patrones comunes. Probablemente se confundiría con partes comentadas como <!-- <h1>{$title}</h1> -->
. No cubre includes con get_template_part()
, quizás puedas agregarlo tú mismo (pero no hay un gancho fácil para eso). Ten cuidado con <h1>Nombre del sitio</h1> [contenido] <h2>Título de la entrada</h2> [contenido] <h1>Otro encabezado grande</h1>
, no querrás que coincida con eso.
La idea general sería engancharte (tarde) al filtro template_include
, para saber qué archivo de plantilla se incluirá. Analiza este archivo, buscando el patrón anterior. Si lo encuentras, establece una variable que era null
a true
. Si no puedes encontrarlo, establécela en false
. Guarda el resultado en caché, ya que probablemente será una operación costosa y la plantilla no cambia tan a menudo.
No sabrás el resultado hasta que se incluya la plantilla, pero supongo que cambiarás la salida de the_title()
basándote en el resultado. En ese caso, no necesitas saberlo tan pronto.
