posts – Agregue dinámicamente la identificación a las etiquetas de encabezado

Pregunta:

¿Cómo agrego un atributo id dinámicamente a cada etiqueta de encabezado en un sitio web de wordpress usando php? Quería hacerlo de modo que para cada etiqueta de encabezado (h1, h2, h3, h4, h5, h6) tenga una identificación única adjunta para que sea como: <h1 id="this_is_sparta">This Is Sparta</h1>

Entonces puedo vincularlo usando <a href="#this_is_sparta">Go to This Is Sparta</a>

He estado buscando una solución para esto durante horas y parece que no puedo encontrar nada, así que si alguien puede ayudar, ¡cualquier cosa sería apreciada!

Si debe hacerse manualmente, todo está bien, solo necesito una forma más fácil de hacerlo para un cliente.

Respuesta:

Tuve este mismo dilema y encontré este complemento: Agregar ID a las etiquetas de encabezado , y funciona bien para las publicaciones. (No estoy afiliado al complemento de ninguna manera).

Para que también funcione para las páginas, tuve que hacer un cambio en el código, que se explica en esta página de soporte: No agregar ID

Parece que el desarrollador no está activo y no ofrece ningún soporte para el complemento, por lo que, desafortunadamente, si encuentra algunos problemas, debe solucionarlos usted mismo. Pero el complemento es una buena base para comenzar.

En el siguiente código, eliminé la marca "is_single ()", de modo que el código funcione tanto en las páginas como en las publicaciones. Además, eliminé parte del código "extra" para que se ajustara a la pregunta de OP.

//Author URI: http://stephanis.info

add_filter( 'the_content', 'add_ids_to_header_tags' );
function add_ids_to_header_tags( $content ) {

    $pattern = '#(?P<full_tag><(?P<tag_name>h\d)(?P<tag_extra>[^>]*)>(?P<tag_contents>[^<]*)</h\d>)#i';
    if ( preg_match_all( $pattern, $content, $matches, PREG_SET_ORDER ) ) {
        $find = array();
        $replace = array();
        foreach( $matches as $match ) {
            if ( strlen( $match['tag_extra'] ) && false !== stripos( $match['tag_extra'], 'id=' ) ) {
                continue;
            }
            $find[]    = $match['full_tag'];
            $id        = sanitize_title( $match['tag_contents'] );
            $id_attr   = sprintf( ' id="%s"', $id );
            $replace[] = sprintf( '<%1$s%2$s%3$s>%4$s</%1$s>', $match['tag_name'], $match['tag_extra'], $id_attr, $match['tag_contents']);
        }
        $content = str_replace( $find, $replace, $content );
    }
    return $content;
}

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım