WordPress で個別記事ページにのみ記事本文に何か追加したいときの対応方法

2012年04月09日

WordPress

いつもは毒にも薬にもならない前置きから始まる僕ですが、今日はどうでも良い前置きを書きません!嬉しいことがあったからです。WordPress で遊んでいて困ったことがあったんですが、それが無事解決したからです。否!解決したのではない、解決してもらったという方が正しいのか。正確には「助力頂いた」になるかな。嬉しいですね、困ったときに助けて頂いた時って。僕もこの恩を返すべく、困った人がいたら助けてあげれるよう精進していこうと思いましたよ!思いましたよ!

さて、今回困ったことはWPで「個別記事ページの記事本文の最後に何か追加したいものがある」場合についてです。ほら、 Twitter のプラグインとかであるでしょ?「つぶやくボタン」つけられるヤツとか。あれ、設置する際にはテーマファイルに呪文を追加したりすることもなく、勝手に本文の後に追加してくれるでしょ?あれがやりたくて。

前提条件

出力したいものは関数になってるとします

記事本文の最後に追加したい

これを記事本文の最後に追加させたいので、 functions.php にフックを記述します

フックって何だよ!って方はこちらなどを参考にしてみてはいかがでしょう

WordPressをカスタマイズするなら覚えておきたいアクションフックとフィルターフック

まず関数を一つ作ります。関数名は頑張ってユニークなものを作ってください

その関数の引数は仮に $content としましょ。

関数の引数を表示させて、その後出力したいものを記述します。これで関数自体は完了。

次に the_content フィルターフックを使って本文の内容を書き換えてしまいます。第二引数の ‘ore_content’ は先ほど作った関数名を指定してあげてください。

これを個別記事にのみ表示させたい

ここで僕は、個別記事に表示させたいんだから単純にこうすれば良いじゃないかと思いました
※注 これは動きません

ここがかなり間違いポイントでした!

functions.php に直接 is_single() は効かないようですよ!

おかもとさん、ひっしーさんに教えて頂きました

@wokamotoさん、@HissyNCさん、ありがとうございました(/’□’)/

もう、こんなに優しくスーパープロフェッショナルな方にすぐに教えて頂けるって凄い!Twitterの力ももちろんだけど、本当にさらっと教えて頂けるWPerさま方の心意気が凄い!

さらに混沌へと

initフック使えば良いのか!と思いまたさらに安易な行動に走ってみましたよと

何かもう、何がしたいのかよく分からないですね。

ダメポイントはどこ?

そもそも、最初に書いてたものに追加、追加、ってやってる書き方がおかしいよね!ちゃんと見ればこの sarani_wrap() は個別記事か否かの判定をしているだけだし。

つまり、一番ダメなポイントは

いきあたりばったりで書く精神

これに尽きますね

解決方法

余分に追加した関数 sarani_wrap はいりません。なぜなら条件分岐を ore_content に含めれば良いからです。

すると必然的に init フィルターも不要になりますね

改善後のコードがこちらになります

びっくりするくらい簡単なコードになりましたね。これで無事目的を果たすことが出来ました

まとめ

  • 記事に追加する際は add_filter() フックを使う
  • functions.php には直接 in_single() 効かん。関数内に入れる
  • 一度動いても油断しない。「果たしてそれ適切なコードか?」を再度見直す。自分なんて信じちゃダメ
  • WPerはイケメンで優しい

他にこんな事も書いてます

FBでコメント

2個のコメント

  1. 書いた:WordPress で個別記事ページにのみ記事本文に何か追加したいときの対応方法 – http://t.co/WrMG1zh2

  2. WordPress で個別記事ページにのみ記事本文に何か追加したいときの対応方法: STACKSTOCK http://t.co/pW0eh7NL

トラックバック/ピンバックはありません。