読者です 読者をやめる 読者になる 読者になる

かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress WP Social Bookmarking Light を好きなところに表示させたい。

WP Social Bookmarking Lightは管理画面から表示させたいソーシャルブックマークを選ぶだけで簡単にショーシャルブックマークのボタンを設置できるWordPressプラグインです。

簡単に使えるように管理画面の設定でブックマークボタンを表示させる場所を選べるのですが、個別記事の上下かページでも表示させるかどうかの選択肢しかありません。
なので、テンプレートに記述して好きな位置に表示させることができるようにしたいと思います。
※この記事はプラグインが変更されると役に立たなくなる可能性があります

ソーシャルブックマークボタンを表示させるコード

plugins/wp-social-bookmarking-light/modules/content.phpというファイルにプラグインを出力するwp_social_bookmarking_light_output_eという関数があったのでコレを利用します。
テンプレートの好きなところに下記のコードを記述すれば、管理画面で設定しているソーシャルブックマークが出力されます。

<?php
// ソーシャルブックマークボタンを出力する
if( function_exists('wp_social_bookmarking_light_output_e') ) {
    wp_social_bookmarking_light_output_e();
}

簡単です☆

ただし、この方法ではそのまま出力されてしまうので「一度変数にして他のものとまとめて出力したい! 」という時には使えません。
同じくplugins/wp-social-bookmarking-light/modules/content.phpを見ているとソーシャルブックマークボタンを出力するwp_social_bookmarking_light_output_e()内でwp_social_bookmarking_light_outputという関数が呼ばれており、この子がブックマークボタンを表示させるコードを返しているようでした。この関数を使えば変数で受け取れそうです。
 

ソーシャルブックマークボタンを表示させるコードを変数で受け取る方法

次のコードをfunction.phpに記述すれば好きなテンプレートでget_my_social_bookmark()を呼べばコードで変数で受け取る事ができます。

<?php // function.php
function get_my_social_bookmark() {
  if( function_exists('wp_social_bookmarking_light_output') ) {
    $options = wp_social_bookmarking_light_options();
    $services = $options['services'];
    return wp_social_bookmarking_light_output($services, null, null);
  } else {
    return '';
  }
}

 

ブックマークを出力/取得できる関数にまとめる。

せっかくなので、ソーシャルブックマークボタンを出力も変数で取得もできる関数にまとめちゃいます。
function.phpに次のコードを書きます。

<?php // function.php
function my_social_bookmark($echo = true) {
  if( $echo && function_exists('wp_social_bookmarking_light_output_e') ) {
    wp_social_bookmarking_light_output_e();
  } else if( function_exists('wp_social_bookmarking_light_output') ) {
    $options = wp_social_bookmarking_light_options();
    $services = $options['services'];
    return wp_social_bookmarking_light_output($services, null, null);
  }
}

 
1. ソーシャルブックマークボタンを出力する
テンプレートファイルに下記コードを書けばOKです

<?php my_social_bookmark(); ?>

2. ソーシャルブックマークボタンのコードを変数で受け取る テンプレートファイルに下記コードを書いて変数を好きな所で出力してください。

<?php
  $bookmark = my_social_bookmark(false);
  // なにか処理
  
  // ソーシャルブックマークボタンを出力
  echo $bookmark;
?>

 

記事中にソーシャルブックマークボタンを表示させたい。

ショートコードとして登録しておけば記事中にも使えそうです。
次のコードをfunction.phpに記述してショートコードを登録します。

<?php // function.php
function my_social_bookmark_buttons() {
  if (function_exists("wp_social_bookmarking_light_output_e")) {
    wp_social_bookmarking_light_output_e();
  }
}
add_shortcode('socialBtns', 'my_social_bookmark_buttons');

あとは記事中の好きなところに次のショートコードを記述すればOK

[socialBtns]

 


WP Social Bookmarking Light便利ですね。
いつもソーシャルボタンは自作で記述していたのですが、このプラグインを使えば納品しちゃってクライアントさんが更新するようになっても簡単にブックマークの種類を変えられますし、ショートコードを用意しておけば長めの記事メインのサイトでも記事の作成者が好きな所にソーシャルブックマークボタンを出せるので記事のシェアがしやすく工夫することもできるようになりそうです!

[参考]

 
追記(2015 04.21)
WP Social Bookmarking Lightで表示されるボタンはデフォルト設定だと今開いているページのURLがボタンに割り当てられるみたいで、作った関数を利用してArchiveテンプレートページなどで各記事にボタンを表示させても、すべてアーカイブページのソーシャルブックマークボタンになってしまい該当記事のボタンになっていませんでした。

wp_social_bookmarking_light_output(), wp_social_bookmarking_light_output_e()の第2引数にリンク先のurlを第3引数にタイトルを渡すことでソーシャルブックマークボタンのリンクとタイトルをコントロールすることができます。

ブックマークを出力/取得できる関数にまとめる。で作った関数を修正

<?php // function.php
// @param $link リンク先のURL
// @param $title リンク先のタイトル
function my_social_bookmark($echo = true, $link = null, $title = null) {
  if( $echo && function_exists('wp_social_bookmarking_light_output_e') ) {
    wp_social_bookmarking_light_output_e(null, $link = null, $title = null);
  } else if( function_exists('wp_social_bookmarking_light_output') ) {
    $options = wp_social_bookmarking_light_options();
    $services = $options['services'];
    return wp_social_bookmarking_light_output($services, $link, $title);
  }
}

Archiveテンプレートのループ内で使う時にget_the_permalink()get_the_title()でリンクとタイトルを渡してあげると各記事のソーシャルブックマークボタンが表示されるようになります。

Archiveテンプレートのループ内で使うサンプル

// archive.php
<?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>
    // ソーシャルブックマークボタンを表示
    <?php
      $permalink = get_the_permalink();
      $title = get_the_title();
      // 変数にして使う場合は第1引数をfalseにしてください
      my_social_bookmark(true, $permalink, $title);
    ?>
  <?php endwhile; ?>
<?php endif; ?>

 

カラフル。(期間生産限定盤)(DVD付)

カラフル。(期間生産限定盤)(DVD付)