環境
WordPress:6.6.1(クラシックテーマ)
PHP:8.3.9
概要
PHPのob_start() → ob_get_clean() 関数の使い方と、
WordPressの関数(例:bloginfo()等)を、WordPressでない外部ファイルから実行する場合の例です。
出力のバッファリングを有効にする時にやること
ob_start()関数で出力のバッファリングを有効化する。
ob_get_clean()関数で出力バッファの内容を取得し、そのバッファを無効化する。
結論
- PHPを埋め込んだHTMLが保存されたPHPファイルを、includeやrequireした場合に、その実行結果が反映された文字列を取得できる。
- wp-load.php を requireすればWordPressの関数は外部ファイルから利用可能。
例:出力のバッファリングを有効化しない場合
次の2つのPHPファイルを準備する。
ObInclude.php
<?php
function getA(): string
{
return 'あいうえお';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo getA(); ?></title>
</head>
<body>
</body>
</html>
ObTest.php
<?php
printf("===== require_onceの出力 ========================================");
require_once './ObInclude.php';
printf("\n\n===== file_get_contents()関数の出力 ========================================\n");
echo file_get_contents('./ObInclude.php');
printf("\n========================================\n");
ObTest.php の実行結果
===== require_onceの出力 ========================================
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>あいうえお</title>
</head>
<body>
</body>
</html>
===== file_get_contents()関数の出力 ========================================
<?php
function getA(): string
{
return 'あいうえお';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo getA(); ?></title>
</head>
<body>
</body>
</html>
========================================
上記のように表示されて終了する。
出力をバッファリング化しないと、関数等の実行結果が反映された文字列を変数に格納することができない。
file_get_contents()関数等を利用しても、実行結果が反映される前の文字列しか取得できない。
例:出力のバッファリングを有効化する場合
上記のObInclude.php を再利用する。
ObTest.php は下記の内容になる。
ObTest.php
<?php
ob_start();
require_once './ObInclude.php';
$html = ob_get_clean();
printf("===== \$htmlの内容 ==========\n");
echo $html;
ObTest.php の実行結果
===== $htmlの内容 ==========
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>あいうえお</title>
</head>
<body>
</body>
</html>
上記のように表示されて終了する。
関数等の実行結果が反映された文字列を変数に格納することができた。
出力のバッファリングを有効化して、header.phpを読み込む
WordPressのクラシックテーマでよく使われる、htmlやPHPのコード(WordPressの関数を含む)を記述した header.php というファイルを作成し、それを外部ファイルから読み込む例です。
次の2つのファイルを準備し、それぞれWordPressのクラシックテーマを保存する場所へ配置する。
header.php
<header>
<h1>
<?php bloginfo('name'); ?>
</h1>
</header>
test.php
<?php
require_once('wp-load.php の絶対パス または 相対パス');
ob_start();
require_once ('header.php の絶対パス または 相対パス');
$header = ob_get_clean();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<title><?php bloginfo('name'); ?> - test.php</title>
</head>
<body>
<?php echo $header ?>
</body>
</html>
Webブラウザから結果を確認
test.php をWebブラウザで表示して、header.php の内容が反映されていることを確認すれば良い。