it-swarm.com.de

Wie entferne ich alle Hyperlinks, die mit einem # beginnen?

Die Sofortartikel von Facebook lehnen Artikel ab, die Hyperlinks zur aktuellen Seite enthalten (z. B. <a href="#_ftn1">[1]</a>). Wie kann ich den Inhalt der Posts filtern, um diese Links zu entfernen, bevor ich sie in Facebook Instant Articles veröffentliche?

Ich kenne eine ähnliche Frage zu StackOverflow: Wie entferne ich einen Hyperlink von Bildern in einem WordPress-Beitrag? , aber meine RegEx-Kenntnisse reichen dazu nicht aus wandle das in das um, was ich brauche.

PS - Ich verwende die semi-offiziellen Instant Articles für WP , was bedeutet, dass ich instant_articles_content filtern kann.

PPS - Es wäre schön zu wissen, wie man den Link entfernt, aber den Linktext belässt und wie man sowohl den Link als auch den Linktext entfernt.

1
Mark Barnes

Inspiriert von @Samuel Elh, aber unter Berücksichtigung von Attributen in einfachen oder doppelten Anführungszeichen und einem hrefname__, der möglicherweise nicht das erste Attribut eines Ankers ist:

function wpse_227315_strip_hyperlinks( $content ) {
    preg_match_all( '!<a[^>]*? href=[\'"]#[^<]+</a>!i', $content, $matches );

    foreach ( $matches[0] as $link )
        $content = str_replace( $link, strip_tags( $link ), $content );

    return $content;
}

add_filter( 'the_content', 'wpse_227315_strip_hyperlinks' );

Beachten Sie, dass dadurch der Linkknoten/HTML-Code vollständig aus dem Inhalt des Posts entfernt wird. Dadurch wird der HTML-Link nur durch den inneren Text ersetzt.

1
TheDeadMedic

Sie können das Interconnectit DB Search/Replace Tool verwenden, um alle Instanzen von Zeichenfolgen in Ihrer Datenbank zu suchen und zu ersetzen. Damit ist Ihr Problem möglicherweise nicht vollständig gelöst, aber Sie können nach <a href="# suchen und es durch <a href=" ersetzen.

Ich glaube nicht, dass Sie genau das versuchen, aber es ist hoffentlich ein Start in die richtige Richtung.

1
Paul Shryock

Probieren Sie diese Funktion aus:

function wpse_227315_strip_hyperlinks( $content ) { 

    preg_match_all( '/<a href=\\"([^\\"]*)\\">(.*)<\\/a>/iU', $content, $matches );

    foreach( $matches[0] as $link ) {

        preg_match_all('/(?<=href=\").+(?=\")/', $link, $matches2);
        $href = isset( $matches2[0][0] ) ? $matches2[0][0] : false;

        if( 0 === strpos($href, '#') ) {

            $content = str_replace( $link, strip_tags($link), $content );
        }

    }

    return $content;

}

Schließen Sie es an Ihren Inhaltsfilter an, z. B. add_filter(tag_name, 'wpse_227315_strip_hyperlinks'). Sie sollten den Filter entfernen (mit remove_filter () , z. B. remove_filter(tag_name, 'wpse_227315_strip_hyperlinks')), nachdem Sie auf Facebook gepostet haben.

1
Samuel Elh