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