ショートコードで最新記事のブログカードを表示させる


ワードプレスの投稿記事内にphpスクリプトを書きたい思ったことはありませんか?
さんざんテンプレートをいじくってきた僕ですが投稿記事内にphpスクリプトを書いたことがありませんでした。

やり方はショートコード。
知ってましたけど、今いち需要がないのと、まあこれが一番の理由ですがfunctions.phpいじるの面倒くさ〜と思っていてやった事がありませんでした。

でも、今日はちょっと時間があって、なおかつちょっとやる気が出てるのでショートコードの設定をしてみようと思います。

ショートコードはよく考えたらいつも使っていた

プラグインですがショートコードは長いことお世話になっていたのを思い出しました。
「blogcard」と「speech_bubble」

blogcard

みんな使ってますよね。
記事へのリンクをサムネイル画像と抜粋テキストを付けて表示してくれるプラグイン。

投稿記事の中では頻繁に使わせてもらってます。

こんな感じですね。↓

speech_bubble

こちらも有名なプラグイン。
吹き出しを表示するプラグインでキャラクターに吹き出しでセリフを言ってもらいたいときに使ってます。

こんな感じです。↓

スピーチバブルです!

自作のショートコードはどんな機能にする?

自作のショートコードはどんな機能にするか?
最新の投稿へのリンクを表示するブログカードを作りたい。

実はショートコード自体に興味があったわけじゃなくて、これを作りたかったのですよ。
それで、投稿記事に中にphpスクリプトを書くには結局ショートコードしかないなと思いましてね。

投稿記事に中にphpスクリプトを書くにはショートコード

これだとちょっと意味が違っちゃいますね。

ショートコードはphpスクリプトをfunctions.phpやプラグインに設置してその出力結果を投稿記事内に表示させる機能。

↑正確にはこれですね。

さっそく実践、まずはテストから

といってもやってみたらショートコードの設定自体は実に簡単。
これをfunctions.phpに書くだけ。

function last_post_blogcard(){
  return “最新記事のブログカード”;
 }
 add_shortcode('last_post_blogcard', 'last_post_blogcard');

add_shortcodeの中の引数は
●記事の中に書く文字列
last_post_blogcard
●関数名
last_post_blogcard(ここでは同じにしてるがもちろん別々にしてOK)

出力はechoではなくreturnにする。
echoだと意図した場所に表示されないことがある。

functions.phpのようなphpファイルには最後のphp閉じタグ ?>は付けない。
最後のphp閉じタグは省略してもOK、というか「付けたらダメ」とも言われている。
知らずに入った空白文字などを認識するエラー防止のためだそうだ。

ここまでをfunctions.phpに設定して、投稿エディターで記事の中に
[last_post_blogcard]
を書いたらあっさり成功。
投稿記事中のショートコードを書いた部分に「最新記事のブログカード」というテキストが表示されました。

次は最新記事を持ってくる機能

最新記事を持ってくる関数・・・なんだっけな、最近ワードプレスいじってないからすっかり忘れている。
ググります。

$data = get_posts('post_type=post&order=DESC&orderby=date&showposts=1');
if(isset($data[0])) {
   return get_permalink($data[0]->ID);
}

最新の記事を一個だけ引っ張ってきてそのパーマリンクを取得して出力。

functions.phpに書くのは次のようなスクリプトになりますね。

function last_post_blogcard(){
   $data = get_posts('post_type=post&order=DESC&orderby=date&showposts=1');
   if(isset($data[0])){
     return get_permalink($data[0]->ID);
   }
}
add_shortcode('last_post_blogcard', 'last_post_blogcard');

とりあえずここまでのテストをしてみます。
ショートコードを書いた投稿記事はどうなっているか。
投稿記事中のショートコードを書いた部分に最新記事のurlが表示されました。

最新記事のURLでブログカードを表示させる

アホみたいですけど試しに力技をやってみる。
ショートコードの入れ子。

プラグインPz-HatenaBlogCardの引数部分に自作ショートコードを入れてみる。
[blogcard [last_post_blogcard]]
だめでした。
考えてみりゃ当たり前です。
記事として表側に表示される自作ショートコードの結果を別のショートコードの引数に入れられるわけがない。

となるとふりだしに戻るわけで。

あかん、時間がない。今回はここで終了!

続きはこちらの記事で→ショートコードで最新記事のブログカードを表示させる 第2弾