Wordpressでショートコードが使えない場合の対処方(僕の場合)

今回はwordpressでサイトを開発をしている際にショートコードが使えなくなってしまったのでその解決方法を書いていきたいと思います!このショートコードが使えない問題は原因が何パターンかあるので、この記事は1つの解決方法だと思ってもらえると嬉しいです!!

はじめに

wordpressで自作テーマを開発していたのですが、なんと、ショートコードが使えない事態に!!

ショートコードは投稿エディタで以下のように打ち込むだけでhtmlを出力してくれる便利なものです。

[hogehoge]

この実装には functions.php に以下のような記述をする必要があります。

function hogehoge_func() {
    return "ほげのテスト!";
}
add_shortcode('hogehoge', 'hogehoge_func');

それを不備なく記述しているのにショートコードがそのまま出力されてしまいました。。。

今回はそんな不具合を修正していきたいと思います!!

原因はコンテンツの取得方法にあった!

wordpressのコンテンツ(個別記事)を出力する際にはいろいろな記述があると思います。

  1. the_content();
  2. get_the_content();
  3. get_post()->post_content;
  4. などなど...

僕の場合は、コンテンツ情報を1つのハッシュにした方が、後々管理しやすいかなと思ったので [ get_post()->content ] で文字列を取得してハッシュに代入していました。

これが仇に...

wordpressの仕様では、 [ the_content() ] で取得する場合と [ get_the_content() ] や [ get_post()->post_content ] ではデータの扱い方が違うようです。

[ get_the_content() ] と [ get_post()->post_content ] はエディタで作成した文字列をそのまま出力します。

それに対して、[ the_content() ] は [ apply_filters() ] と呼ばれるフィルターを通ってから出力されます。

このフィルターを通ることでショートコードが変換されるわけですね!

解決方法!

解決方法は単純で [ apply_filters() ] を通してあげればOKです!

以下のようなコードで [ the_content() ] と同様に使用することができます!

<?php
  $content = apply_filters('the_content', get_the_content());
  $content = str_replace(']]>', ']]>', $content);
?>

もしくはショートコードだけ使いたい場合は以下のように記述します。

<?php $content = do_shortcode(get_the_content()); ?>

いやぁ、wordpressは関数が多くて難しいですな~

というわけで、最後までありがとうございました!!