web-dev-qa-db-fra.com

Comment puis-je supprimer tous les liens hypertexte qui commencent par un #?

Les articles instantanés de Facebook rejettent les articles contenant des liens hypertexte vers la page actuelle (par exemple, <a href="#_ftn1">[1]</a>). Comment puis-je filtrer le contenu de la publication pour supprimer ces liens avant de publier sur Instant Articles sur Facebook?

Je suis au courant d'une question similaire sur StackOverflow: Comment supprimer un lien hypertexte d'images dans Wordpress post? , mais mes compétences RegEx ne sont pas assez bonnes convertissez cela en ce dont j'ai besoin.

PS - J'utilise les Instant Articles semi-officiels pour WP , ce qui signifie que je peux filtrer instant_articles_content.

PPS - Il serait bien de savoir à la fois comment supprimer le lien tout en laissant le texte du lien et comment supprimer à la fois le lien et le texte du lien.

1
Mark Barnes

Inspiré de @Samuel Elh, mais en tenant compte d'attributs simples ou doubles et d'un href qui pourrait ne pas être le premier attribut d'une ancre:

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' );

Notez que cela supprimera complètement le lien noeud/HTML du contenu de la publication. Cela remplacera le lien HTML par le texte interne uniquement.

1
TheDeadMedic

Vous pouvez utiliser l'outil de recherche/remplacement de base de données Interconnectit pour rechercher et remplacer toutes les occurrences de chaînes dans votre base de données. Cela ne résoudra peut-être pas totalement votre problème, mais vous pouvez commencer par rechercher <a href="# et le remplacer par <a href=".

Je ne pense pas que ce soit exactement ce que vous essayez de faire, mais j'espère que c'est un début dans la bonne direction.

1
Paul Shryock

Essayez cette fonction:

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;

}

Accrochez-le dans votre filtre de contenu, par exemple add_filter(tag_name, 'wpse_227315_strip_hyperlinks'). Vous devez supprimer le filtre (avec remove_filter () , par exemple remove_filter(tag_name, 'wpse_227315_strip_hyperlinks')) après votre publication sur Facebook.

1
Samuel Elh