web-dev-qa-db-fra.com

Nofollow liens externes

Bonjour les gars, j'utilise le code suivant pour rendre tous les liens externes nofollow.

add_filter('the_content', 'my_nofollow');
add_filter('the_excerpt', 'my_nofollow');

function my_nofollow($content) {
return preg_replace_callback('/<a[^>]+/', 'my_nofollow_callback', $content);
}
function my_nofollow_callback($matches) {
$link = $matches[0];
$site_link = get_bloginfo('url');

if (strpos($link, 'rel') === false) {
    $link = preg_replace("%(href=\S(?!$site_link))%i", 'rel="nofollow" $1', $link);
} elseif (preg_match("%href=\S(?!$site_link)%i", $link)) {
    $link = preg_replace('/rel=\S(?!nofollow)\S*/i', 'rel="nofollow"', $link);
}
return $link;
}

Mais après avoir ajouté ce code dans les fonctions de thème de mon site, tous les liens sont toujours dofollow.

J'utilise Advanced Custom Fields Pro plugin et les liens ajoutés en utilisant ce plugin sont toujours dofollow.

Comment faire en sorte que tous les liens externes ne suivent pas?

3
Jase

Edit 2: En suggérant @Mark Kaplun, la solution générale devrait être la suivante. Nous ferons le filtrage une fois la page générée, nous ne nous soucierons donc pas du plugin que nous utilisons.

Nous avons besoin d'un hack ici pour obtenir une page entière:

ob_start();

add_action('shutdown', function() {
    $final = '';

    // We'll need to get the number of ob levels we're in, so that we can iterate over each, collecting
    // that buffer's output into the final output.
    $levels = ob_get_level();

    for ($i = 0; $i < $levels; $i++)
    {
        $final .= ob_get_clean();
    }

    // Apply any filters to the final output
    echo apply_filters('final_output', $final);
}, 0);

Je prends ce code de cette question

Ensuite, vous pouvez supprimer 2 anciens filtres:

add_filter('the_content', 'my_nofollow');
add_filter('the_excerpt', 'my_nofollow');

Utilisez-en un seul à la place:

add_filter('final_output', 'my_nofollow');

Ancienne réponse

Ajoutez juste un filtre de plus.

add_filter('acf/load_value/name=my_field', 'my_nofollow' );

Edit: Le concept pour résoudre le problème ici est de filtrer le contenu généré par le plugin, pour vous ici, c'est ACF. Étant donné que the_content provient de WP, et non du plug-in que vous utilisez, ajouter un filtre à the_content ne vous aidera pas.

3
Tung Du