web-dev-qa-db-ja.com

Nofollow外部リンク

こんにちはみんな私はすべての外部リンクを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;
}

私のサイトのテーマの機能にこのコードを追加した後しかしすべてのリンクはまだdofollowです。

私はAdvanced Custom Fields Proプラグインを使用しており、このプラグインを使用して追加したリンクはまだdofollowです。

すべての外部リンクをフォローしないようにする方法

3
Jase

編集2:@ Mark Kaplunの提案により、一般的な解決策はこれであるはずです。ページが生成された後にフィルタリングを行いますので、どのプラグインを使用していても構いません。

ページ全体を入手するには、ここでハックが必要です。

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

この質問からこのコードを取り出します

その後、2つの古いフィルタを削除することができます。

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

代わりに1つだけを使用してください。

add_filter('final_output', 'my_nofollow');

古い答え

もう1つフィルタを追加するだけです。

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

編集:ここで問題を解決するためのコンセプトはプラグインによって生成されたコンテンツをフィルタリングすることです、あなたのためにここにACFがあります。 the_contentはWPのもので、使用しているプラ​​グインではないので、the_contentにfilterを追加しても意味がありません。

3
Tung Du