エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


ob_start、ob_get_contentsを利用しショートコード内でinclude・WordPressプラグイン開発

      2017/03/12

ショートコードでinclude、require処理するには ob_start()関数

 

ショートコードの処理の中でテンプレートを読み込む処理・ob_start()関数

 
WordPressのショートコードを使って処理を構築する際のお話です。
 
PHPの処理を含む HTML部分をテンプレート化し、それを取り込む際に include()関数を使ってファイルを読み込みますが、併せて使う ob_start()関数、ob_get_contents()関数について解説します。
 
 
ファイルを読み込む際に include()関数を使うのは、ファイルに記述した PHPの処理も含めて処理してくれるところがいいところなんですが、ショートコードで使用する場合は include()が記述されているその場所で標準出力されてしまうところが問題でした。
 
それを解決してくれるのが今回紹介する標準出力をバッファリングする ob_start()関数、バッファリングした情報を変数に代入する ob_get_contents()関数です。
ob_start()関数、ob_get_contents()関数については「PHP関数ob_start、ob_get_contentsで標準出力をバッファリング・変数に代入」で詳しく解説していますので、そちらを参照してください。
 
ファイルをインクルードする際の問題は、include関数だけではなく、include_once()関数、require()関数、require_once()関数でも同じですが、ob_start()関数を使えば同じように解決できます。
 
 
その他、関連する記事は下記になります。
ショートコードの使い方については「WordPress投稿にPHPを記述するショートコードの使い方add_shortcode」の記事を。
 
付随して、ショートコードで任意のファイルを読み込むだけの場合は「WordPress 任意のファイルを読み込むショートコードの処理」の記事を。
こちらでは「file_get_contents()関数」を使う方法を紹介しています。
 
functions.phpが置いてある場所については「WordPressの functions.phpがある場所」の記事を。
 
 

ショートコードで include()関数を使う問題点

 
例えば、下記のような外部ファイルを読み込むショートコード処理を作ったとしましょう。
下記のショートコードから呼び出される処理を記述する場所は、functions.phpでも、プラグインを作成する場合でも同じような問題を抱えています。
 

 
 
「include_file.php」は、以下のような内容です。

 
投稿や固定ページに記述するショートコードは「[ob_start_test]」になります。
 
 
上記の処理を実行すると下記の画像のようなります。
20150805_wp_01
 
上記の画像では「あいう」が 2か所に出力されています。
これは、includeしたところで一度標準出力され、さらにショートコードが編集されている箇所でもう一度出力されるからです。
 
 


 

include()した情報をバッファリング関数 ob_start()で取得

 
include()関数は、そういう処理なので仕方がないワケですが、このままでは WordPressのショートコードで処理を作成する場合には使えません。
 
そこで、下記のように標準出力をバッファリングする ob_start()関数、バッファリングした情報を変数に代入する ob_get_contents()関数、ob_end_clean()関数を使うことで対処を行います。
 

 
 
「ob_start()」と「ob_end_clean()」で囲んだ処理は標準出力されずにバッファリングされ、そのバッファリングされた内容を「$html = ob_get_contents()」の部分で変数「$html」に代入しています。
 
これにより、ショートコードを編集した場所にのみ「include_file.php」の内容が反映されるようになります。
 
 
この記述の方法を発見したことで、ショートコードを使ったプラグイン開発で、テンプレートを外部ファイル化することができ、開発の自由度が格段にアップしました!
 
 

HTMLファイルを読み込むなら file_get_contents()関数が簡単

 
先に紹介した「WordPress 任意のファイルを読み込むショートコードの処理」の記事では「file_get_contents()関数」でファイルを取り込む方法を紹介しています。
 
「file_get_contents()関数」は、PHPの関数の中でもすごく便利な関数で、ファイルの中身を取得して、その情報を変数に入れることができますので、静的な HTMLファイルを取り込むのであれば「file_get_contents()関数」で全く問題ありません。
 
ですが、この記事で解説した「include_file.php」ファイルのように、取得するファイルに PHPのコードが記述されていて、その PHPのコードを実行してその結果を編集したものを画面に表示したい、という場合には使えません。
サンプルで記載した「include_file.php」だと、「<?php echo “い”; ?>」の部分がそのまま表示されてしまいます。残念...
 
 

この方法は正しいのか!?

 
最後に。
ここで紹介した方法は、あくまでも「この方法で実行するとできました!」という内容です。
 
あちこちサイトを探してみましたが、明確に解説しているサイトが見当たらず、
 「もしかするとバッドノウハウなのかも?」
 「WordPressなんだからなんか専用の関数があるんじゃ?」
なんてことを思いながら記事を書きました。
 
これで問題ないのか、どなたか教えていただけると幸いです!

 - WordPress

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

get_categories、get_termsでカテゴリとタクソノミーのターム一覧の編集方法

get_categories()関数やget_terms()関数を使ってタクソノミーのタームを取得し検索処理の部品を作るプログラム作りその解説をしています。

WordPressは危険?最新バージョンにアップデートして利用しよう

WordPress最新バージョン使ってますか?WordPressのバージョンアップをしないリスクを説明し、バージョンアップの手順、バックアップの重要性を解説しています。

EWWW Image Optimizerで画像の圧縮でWordPressを高速化

ページ表示の高速化に使うEWWW Image Optimizerの紹介です。英語で書かれているために取っつきにくいですが設定は3カ所。画像の圧縮もワンクリック。超簡単!

Autoptimizeで簡単設定!HTML、JS、cssを圧縮しWordPress高速化!

Autoptimizeを使って簡単にHTML、JavaScript、CSSを圧縮しサイトの表示を高速化しよう!基本設定、拡張設定とあり柔軟な設定で多彩な環境に対応出来ます。

WordPress 任意のファイルを読み込むショートコードの処理

投稿ページにショートコードを利用して任意のファイルを読み込む処理の解説です。

ショートコードで簡単解決!WordPress固定ページにカテゴリ一覧を編集する方法

ショートコードを使って固定ページや投稿に特定のカテゴリ一覧を編集する処理を作りました。プラグインなしで30行くらいのソースコピペで実現できます!

WordPressで WPtouchを入れてモバイルテーマを「OFF」にしたら元に戻れなくなった

WPtouchを入れてモバイルテーマを「OFF」にしたら元に戻れなくなった。これは「wp_footer」の設定に問題があるからだった。

highlight.jsの設定方法を解説。 Syntax Highlighterから乗換え、高速化にも最適

Crayon Syntax Highlighterの代替案としてhighlight.jsを試してみた。highlight.jsは設置簡単で軽量なシンタックスハイライト。デザインもCSS変更だけの簡単変更。

Theme My Loginの日本語翻訳ファイル Ver.6.4.5対応

Theme My Loginの日本語翻訳ファイルのダウンロードページ。WordPressの翻訳ファイルの設置方法、注意点、翻訳ファイルの作成方法なども解説。

BackWPupでバックアップ・設定したJobの実行、ファイル一覧

BackWPupその4。バックアップ設定した Jobを実行する方法、ログの一覧、保存されたファイル一覧の解説です。