Cómo determinar, desde un script de plugin, si el tema activo tiene <h1>El título de la publicación</h1>

8 nov 2010, 23:26:35
Vistas: 308
Votos: 1

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).

3
Comentarios

Creo que esa es una pregunta demasiado amplia. Un tema puede tener muchos archivos, algunos de los cuales podrían tener <h1>{$title}</h1> y otros no. ¿Y qué está intentando hacer tu plugin? Más detalles sobre el caso de uso nos ayudarían a responderte mejor esta pregunta.

MikeSchinkel MikeSchinkel
9 nov 2010 09:54:44

Quizás podrías aclarar por qué sientes que necesitas determinar qué elemento rodea al título en el tema del usuario, qué pretende hacer tu código y por qué necesita ser consciente del elemento padre del título.

t31os t31os
9 nov 2010 16:56:11

Hola chicos, ¡perdón por dejar esto sin comentar! He actualizado la pregunta con más detalles.

Scott B Scott B
12 nov 2010 22:51:47
Todas las respuestas a la pregunta 2
2

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).

9 nov 2010 16:37:58
Comentarios

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>.

hakre hakre
9 nov 2010 20:16:13

Brillante en su simplicidad.

Jan Fabry Jan Fabry
9 nov 2010 22:52:11
0

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.

9 nov 2010 15:58:01