WordPressのコメント投稿者リンクをリダイレクトし、新しいウィンドウで開く

WordPressのコメント投稿者リンクをリダイレクトし、新しいウィンドウで開く

一、コメント投稿者リンクのリダイレクト

細かいところに気づく方なら、いくつかの WordPress ブログ で、適当な記事を開き、任意のコメント投稿者名にマウスを乗せたとき、ブラウザのステータスバーに表示されるアドレスが次のような形式になっていることに気づくかもしれません。

http://earn.yesmall.biz/?r=http://earnfs.sinaapp.com/

クリックすると、ブラウザはそのままコメント投稿者のサイトへ移動します。自分のサイトのコメントリンクを改めて確認すると、デフォルトではコメント投稿者リンクは投稿者が入力した URL をそのまま表示します。最終的に開く対象ページはどちらも同じですが、サイトのリンク構造から見ると、デフォルト形式では各コメントが外部リンクになり、サイトの評価を分散させる可能性があります。これをサイト内のリダイレクトアドレスに変更すると、より制御しやすくなります。

方法は、現在使用しているテーマの functions.php に次のコードを追加することです。テーマ更新時に上書きされないよう、子テーマまたはカスタムプラグインに入れるほうがよりおすすめです。

// 评论者链接重定向。
add_filter('get_comment_author_link', 'add_redirect_comment_link', 5);
add_filter('comment_text', 'add_redirect_comment_link', 99);

function add_redirect_comment_link($text = '') {
    $home = home_url('/');
    $text = str_replace('href="', 'href="' . esc_url($home) . '?r=', $text);
    $text = str_replace("href='", "href='" . esc_url($home) . '?r=', $text);
    return $text;
}

add_action('init', 'redirect_comment_link');

function redirect_comment_link() {
    if (empty($_GET['r'])) {
        return;
    }

    $redirect = esc_url_raw(wp_unslash($_GET['r']));

    if (!$redirect) {
        wp_redirect(home_url('/'));
        exit;
    }

    if (!empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], home_url()) !== false) {
        wp_redirect($redirect);
        exit;
    }

    wp_redirect(home_url('/'));
    exit;
}

特別な要件がある場合は、同じ考え方でコメント本文中の URL リンクを処理することもできます。ただし、コメント本文内のリンクは数も出どころもより複雑です。変更前にテスト環境で出力結果を確認し、サイト内リンクや管理画面が生成するリンクを誤って変更しないようにするのがよいでしょう。

二、コメントリンクを新しいウィンドウで開く

WordPress のデフォルトでは、コメント投稿者リンクは現在のウィンドウで開きます。訪問者がコメント投稿者リンクをクリックするとあなたのサイトを離れてしまい、多くの場合、トラフィックはこのタイミングで失われます。

古い方法では、wp-includes/comment-template.php を直接編集し、次のコード内の rel="external nofollow" の後ろに target="_blank" を追加していました。

if (empty($url) || 'http://' == $url) {
    $return = $author;
} else {
    $return = "<a rel="external nofollow" href="$url">$author</a>";
}

return apply_filters('get_comment_author_link', $return);

ただし、WordPress のコアファイルを直接変更することはおすすめしません。WordPress をアップグレードしたときに、これらの変更は上書きされてしまうためです。より安定した方法は、やはりテーマの functions.php またはカスタムプラグインでフィルターを使って処理することです。

add_filter('get_comment_author_link', 'comment_author_link_new_window', 20);

function comment_author_link_new_window($link) {
    if (empty($link)) {
        return $link;
    }

    $link = str_replace('<a ', '<a target="_blank" ', $link);

    if (strpos($link, 'rel=') === false) {
        $link = str_replace('<a ', '<a rel="external nofollow noopener" ', $link);
    } else {
        $link = str_replace('rel="external nofollow"', 'rel="external nofollow noopener"', $link);
        $link = str_replace("rel='external nofollow'", "rel='external nofollow noopener'", $link);
    }

    return $link;
}

最後に、robots.txt に次の 1 行を追加し、検索エンジンにこれらのリダイレクトアドレスをクロールしないよう伝えることをおすすめします。

Disallow: /?r=*

保存後にページを更新し、コメント投稿者リンクがサイト内のリダイレクトアドレスに変わっているか、クリック後に対象サイトが新しいウィンドウで開くかを確認します。

Leave a Reply