[WordPress]はてブ付きのAmazonリンクを作成するショートコード

ショートコードをテキトーに作成したメモ。 該当商品のAmazonのページからブックマークレットによりショートコードを生成して、それをWordPressで表示する。

ショートコードの形式はこんな感じに

[amazon asin="123456789" title="本のタイトルとか" hatena="0 or 1" /]

hatena は はてブ数の画像を出すか出さないかのフラグとして使う。

はてなのブクマ数のリンクと画像は…

  • 画像: http://b.hatena.ne.jp/entry/image/http://****
  • リンク: http://b.hatena.ne.jp/entry/http://****

という形式。わかりやすいっすな。

WordPress にショートコードの展開コードを実装(php)

// はてなブックマークのリンクのHTMLテキストを生成する
function create_hatena_link( $url ) {
  $hatena_link = '<a href="http://b.hatena.ne.jp/entry/' . $url . '"><img src="http://b.hatena.ne.jp/entry/image/' . $url . '"></a>"';
}

// ショートコード用の関数
function amazon_shortcode( $attributes, $content = null ) {

  extract( shortcode_atts( array(
    'asin' => '',
    'title' => '',
    'hatena' => '1'
  ), $attributes));

  if ( empty($asin) ) return 'ASINがありません';
  if ( empty($title) ) return 'タイトルがありません';
  $title = str_replace( array('&#038;', '&amp;'), '&', $title );

  // AmazonのURLを作成
  $amazon_url = 'http://www.amazon.co.jp/exec/obidos/asin/' . $asin . '/' . アソシエイトID . '/';

  // はてなブックマークのリンクを作成
  $hatena_link = '';
  if ( $hatena !== '0' ) {
    $hatena_link = create_hatena_link( $amazon_url );
  }

  // 繋げて返す
  return '<a href="' . $amazon_url . '">' . $title . '</a>' . $hatena_link;
}

// ショートコードの登録
add_shortcode('amazon', 'amazon_shortcode');

ショートコードを生成するブックマークレット(Javascript)

ASINURL から・商品名は TITLE タグから抜き出す。

// ASIN の取得
var asin = location.href.match(/\/([0-9X]{10})/i);
if ( asin && asin.length == 2) {
  asin = asin[1];
} else {
  alert("ASINを取得できません");
  return; // END
}

// タイトルの取得
var title = document.getElementsByTagName('title');
if ( title && title.length != 0 ) {
  title = title[0].innerText.replace('"', '&quot;');
  title.replace(/Amazon.co.jp[::][  \t]*([^::]+)/i, function(m0, m1){
    title = m1;
  });
} else {
  alert("タイトルを取得できません");
  return; // END
}

// ショートコードの組み立て
var shortcode = '[amazon title="' + title + '" asin="' + asin + '" /]';

// 出力…面倒なのでコレでいいや
document.write(shortcode);

これをブックマークレット用に1行にまとめればOK

javascript:var asin=location.href.match(/\/([0-9X]{10})/i);if(asin&&asin.length==2){asin=asin[1];}else{alert("ASINを取得できません");return;}var title=document.getElementsByTagName('title');if(title&&title.length!=0){title=title[0].innerText.replace('"','&quot;');title.replace(/Amazon.co.jp[::][  \t]*([^::]+)/i,function(m0,m1){title=m1;});}else{alert("タイトルを取得できません");return;}var shortcode='[amazon title="'+title+'" asin="'+asin+'" /]';document.write(shortcode);
Share
関連記事