it-swarm.com.de

Fügen Sie den Überschriften-Tags dynamisch eine ID hinzu

Wie füge ich mit PHP dynamisch ein ID-Attribut zu jedem Überschriften-Tag auf einer WordPress-Website hinzu? Ich wollte es so machen, dass ich für jedes Überschriften-Tag (h1, h2, h3, h4, h5, h6) eine eindeutige ID angehängt habe, damit es so aussieht: <h1 id="this_is_sparta">This Is Sparta</h1>

So kann ich mit <a href="#this_is_sparta">Go to This Is Sparta</a> darauf verlinken

Ich habe jetzt seit Stunden nach einer Lösung dafür gesucht, und ich kann anscheinend nichts finden. Wenn also jemand helfen kann, wäre alles willkommen!

Wenn es manuell gemacht werden muss, ist alles in Ordnung, ich brauche nur eine einfachere Möglichkeit, dies für einen Kunden zu tun.

5
nwong212

Ich hatte das gleiche Dilemma und fand dieses Plugin: IDs zu Header-Tags hinzufügen , und es funktioniert gut für Beiträge. (Ich bin in keiner Weise mit dem Plugin verbunden).

Damit es auch für Seiten funktioniert, musste ich den Code ändern, der auf dieser Support-Seite erklärt wird: Keine IDs hinzufügen

Es scheint, dass der Entwickler nicht aktiv ist und keine Unterstützung für das Plugin anbietet. Wenn Sie also auf Probleme stoßen, müssen Sie diese leider selbst beheben. Aber das Plugin ist eine gute Ausgangsbasis.

In diesem folgenden Code habe ich das Häkchen bei "is_single ()" entfernt, damit der Code sowohl auf Seiten als auch in Beiträgen funktioniert. Außerdem habe ich einige "Extra" -Codes entfernt, damit sie in die Frage von OP passen.

//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;
}
3
Squazz

Sie können den the_content-Filter verwenden und dann alle Header-Tags im Inhalt suchen und IDs hinzufügen.

Um Header-Tags in Inhalten zu finden, können Sie entweder Regex-Ausdrücke oder so etwas wie simple_html_dom verwenden. Schau dir this an

0
Rajeev Vyas

In wp-includes/formatting.php gibt es eine Funktion namens sanitize_title_with_dashes , die Sie verwenden können.

<h1 id="<?php echo sanitize_title_with_dashes( get_the_title() ); ?>"><?php the_title(); ?></h1>

Wenn Ihr Titel This Is Sparta lautet, wird this-is-sparta ausgegeben.

0
RRikesh