前回は、テーマのための関数「functions.php」ファイルで関数「add_shortcode」を使用し、ショートコードタグを追加しました。
前回の記事はこちら⇒「functions.php」で関数「add_shortcode」を使用しショートコードタグを追加
その際、Amazonの商品リンクを取得する関数をショートコードタグとして追加したのだが、生成するHTMLが長いほど、「functions.php」ファイルも長くなり見にくくなる。
そんなときは、生成するHTMLの部分を「テンプレートファイル」化するとすっきりする。
なお、今回のバージョンは以下です。
- WordPress 3.9
テンプレートファイルの作成
まずは、テンプレートファイルを作成する。
テーマのルートフォルダに適当な名前のフォルダを作成し、その中にPHPファイルを作成する。
今回の場合は、Amazonの商品リンクをテンプレートファイルにするので、フォルダ名は「amazon」、ファイル名は「link-xxxx.php」とした。
実際のファイルの中身はこのような感じで、内容はHTMLのみである。
<h3>検索エンジン最適化(SEO)の関連書籍</h3> <table border=1> … </table>
「functions.php」ファイルでテンプレートファイルを読込
テンプレートファイルを読み込むには、「get_template_part」関数を使用する。
「get_template_part」関数のパラメータは、以下の通り。
- 「$slug」…一般テンプレートのスラッグ名
- 「$name」…特定テンプレートの名前
実際に呼び出されるテンプレートファイルの名前は、「{slug}-{name}.php」のようになる。
もっと具体的に言うと、「get_template_part(‘file’, ‘abc’);」のように呼び出した場合、呼び出されるファイル名は「file-abc.php」というわけ。
そのため、ファイル名は上記のように「link-xxxx.php」とし、「xxxx」の部分をテンプレートファイルの内容で変えて作成すればよい。
で、実際に読み込む関数は以下のようになった。
なお、記事内でショートコードでテンプレートファイルを読み込むには、「ob_start()」、「ob_get_contents()」、「ob_end_clean()」関数を使用し、バッファから値として取り出さないと思ったとおりに表示されないので注意。
//Amazon商品リンク取得 function get_amazon_link($atts){ $link = ''; extract(shortcode_atts(array( 'name' => 'SEO' ), $atts)); ob_start(); if ($name === 'WP') { get_template_part('amazon/link', 'wp'); } elseif ($name === 'PGIN') { get_template_part('amazon/link', 'pgin'); } elseif ($name === 'SEO') { get_template_part('amazon/link', 'seo'); } elseif ($name === 'THEME') { get_template_part('amazon/link', 'theme'); } else { get_template_part('amazon/link', 'seo'); } $temp = ob_get_contents(); ob_end_clean(); $link = $temp; return $link; } add_shortcode('amazon_link', 'get_amazon_link');
これで、「functions.php」関数がすっきりしました。
以上です。
コメント