web-dev-qa-db-ja.com

新しいウィンドウで外部リンクを開く

何らかの変更を加えたり、すべての「外部」リンクを新しいウィンドウで開くことを可能にするプラグインを追加することは可能ですか?

ほんの一例です。私のブログがhttp // timmy.com /という名前で、http:// tom.com /にリンクしたい場合は、同じウィンドウではなく新しいウィンドウを開きますが、http /からリンクする必要があります。同じウィンドウで/timmy.com/からhttp // timmy.com/somewhere /に移動します。

それで、私は私のウェブサイトから別のウィンドウ/タブへのすべての外部リンクが欲しいのですが、私のウェブサイトから私のウェブサイトのどこかへのすべての内部リンクが同じウィンドウ/タブにあることを望みます。

これは可能ですか?

3
Filuren

うんはJavaScriptで行うことができます。

var $j = jQuery.noConflict();

$j(document).ready(function() { //external attribute
    $j("a:not([@href*=http://YOURSITE.com/])").not("[href^=#]")
    .addClass("external")
    .attr({ target: "_blank" });
});
3
curtismchale

あなたはそれをどうやってやるか技術的な面で答えを得ましたが、私は使い勝手の面で思いつきたいと思います - あなたは本当にそうすべきではありません。

いくつかの特定のケース(たとえば、Webベースではないドキュメント)を除いて、リンク用に新しいブラウザウィンドウやタブを開くことは非常に不適切な方法と考えられています(そして既に非常に長い間)。

あなたのサイトを有効にしておく戦略のように思えるかもしれませんが、その新しいタブを明示的に望んでいないけれどもあなたが彼らのために決めたのでとにかくそれを得たユーザをいらいらさせる可能性が非常にあります。

2
Rarst

さて、ホイールを作り直す必要はありません: 外部リンクプラグインWordPress の場合、私は本当にそれをお勧めします。

1
hakre

こんにちは@ ninjaboi21:

@curtismchaleによって、うまく機能するはずのjQueryソリューションが提供されました。 PHP解決策をご希望の場合は、こちらもお役に立ちます。

基本的に、解決策は2つの部分に分かれています。 1つは、PHPのob_start()関数を使って出力をバッファリングすることです。これは簡単で、次にコールバック関数で出力を解析します。これはより複雑です。私はそれほど洗練されていない総当たり方式を使用しました。私はもっ​​と良い方法があると確信していますが、ブルートフォース方式は私のように明るくない人が使うものです。 :)たぶん他の誰かがよりエレガントなものと一緒にやってくるでしょう。

これがコードです。これをあなたのテーマのfunctions.phpファイルに入れてください。

add_action('init','buffer_output_for_links');
function buffer_output_for_links() {
  if (!is_admin())  // No need to do in the admin
    ob_start('decorate_links');
}
function decorate_links($content) {
  $wpurl = get_bloginfo('wpurl');
  $parts = explode('<a',$content);
  for($index = 1; $index<count($parts); $index++) {
    // Break apart on '>' to isolate anchor attributes
    $part = explode('>',$parts[$index]);
    // Remove all target="_blank"
    $part[0] = preg_replace("#\\s*target\\s*=\\s*[\"'].*?['\"]\\s*#",' ',$part[0]);
    // Add target="_blank" to all
    $part[0] = preg_replace('#href\s*=\s*#','target="_blank" href=',$part[0]);
    // Remove target="_blank" from only this domain
    $part[0] = preg_replace("#target=\"_blank\" href=(['\"]){$wpurl}#","href=\\1{$wpurl}",$part[0]);
    // End this part by reassembling on the '>'
    $parts[$index] = implode('>',$part);
  }
  // Finally reassembling it all on the '<a' leaving a space for good measure
  $content = implode('<a ',$parts);
  return $content;
}

- マイクシンケル

0
MikeSchinkel