wordpress 記事のタイトルにはてなブックマークユーザー数を表示させる

 

他の人のブログを色々と見て回りました。

なんか、ブックマークユーザー数が表示されている記事って、結構目につきやすいもんだな~と思い、
このブログでも設置してみることにしました。

これがゴール

ブックマーク表示サンプル
ブックマーク表示サンプル

 

さて、どこから手をつけようか

まず、このブログのテーマはtwentytwelveを親とした、子テーマを使用しています。

そして、子テーマには実は、style.cssとfunctions.phpの2つのみ。

 

つまり、content.phpやsingle.php等は一切触ってないんです。(理由? メンドウだから…。)

 

そうなると、actionやfilterをaddする方法のみで、実装する事が前提です。

 

 

addするポイントを探す。

まず、やりたい事は、「記事のタイトル」にはてなブックマークユーザー数の表示です。

記事のタイトルを表示しているものは、content.php内

<h1><?php the_title(); ?></h1>

です。となると、add_action もしくは add_filter でthe_title にフックさせることに。

 

その前に、はてなブックマーク数はどうやって表示させんの?

ぐぐって見ると、とりあえずそれっぽいものを発見。

自分のブログに「○○users」を表示する

 

この一覧に、wordpressが無い。。まぁ、movable typeでも同じだろうということで、タグをコピペ。

 <a href="http://b.hatena.ne.jp/entry/<$MTEntryPermalink$>">
  <img src="http://b.hatena.ne.jp/entry/image/<$MTEntryPermalink$>"
 alt="はてなブックマーク - <$MTEntryTitle$>" title="はてなブックマーク - <$MTEntryTitle$>">
  </a>

あ、案外簡単だね。

<$MTEntryPermalink$> → get_permalink()

<$MTEntryTitle$> → get_the_title()

になればいいだけか。

 

ローカルでテストするまでもなさそうだ。というわけで、

 

さっそく実装してみましたが…

functions.phpに書いたコードは以下。

※注意※ 以下のタグは間違っています。

add_filter( 'the_title', 'hatena_add', 10, 2 );
function hatena_add( $title ) {
global $post;

$title .= '<a href="http://b.hatena.ne.jp/entry/' . get_permalink() . '">';
$title .= '<img src="http://b.hatena.ne.jp/entry/image/' . get_permalink() . '" alt="はてなブックマーク - ' . $post->title . '" title="はてなブックマーク - ' . get_permalink() . '" />';
$title .= '</a>';

return $title;
}

で、表示させてみると….うーん。

メニュー
メニュー

グローバルメニューにやたら縦の余白が増えたな。。と思ったら、グローバルメニューにも、はてなブックマーク数が…。

参ったな~。でもそんなにこのブログのアクセスは無いから、そんなに参らないか。

ってことで、他の方法を考えながら、管理画面からブログの記事一覧を見てみたら…

記事一覧
記事一覧

おうっ。なんか記事のタイトルにはてなのブックマークタグw

いやー。これは参った。急いでさっきのタグは外そう。

 

どこかフック場所を間違ったな。で、まず整理した。

やりたいことは、

 

記事ループ内の記事タイトルのみに、フックさせる

ってことでぐぐってみたけど、よく分からない。

ってことで、the_titleを少し辿ってみることに。

辿った限りは、get_the_title()が怪しいかな。

wp-includes/post-template.php 102行目あたり

あ、なるほど。

if ( ! is_admin() ) {

管理画面以外に絞ればいいだけの話か。

 

でもこのままだと、まだグローバルナビにブックマークユーザー数が出てしまう。

どうやって、”ループ内の記事タイトルのみ”って条件分岐するんだろうか。

うーむ。分からない。

もっと調べていると、

add_filter( 'the_title', 'hatena_add', 10, 2 );
function hatena_add( $title , $id ) {

で、ループ記事のIDが取得できるっぽい。

なので、

print_r(get_post($id));

を挿入してデバッグしてみたら、

グローバルナビのpost_typeはnav_menu_itemみたいなんで、これなら条件分岐できるっぽい。

で、色々と試行錯誤をしてみた。そして分かったことは、

できない。 よーく考えてみた。

 

<h1 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h1>

そっか。。。全く気づかなかった。

<?php the_title(); ?>

にフィルターをかけても、</a>タグで閉じられちゃうし。。。</a>の後、に入れたい。。

どう考えてもテンプレートさわらないと無理かな。。

 

うーむ、分からない。。。

続きは別の日にしよう。。

コメントを残す