プログラミング

WordPressのソースコード。HTMLにPHPを埋め込むスタイル。

投稿日:2017年5月16日 更新日:

WordPress本体のPHPソースコードや、テーマに含まれているPHPのソースコードを見ると、やたらと PHPの開始タグ(<?php)と終了タグ(?>)が埋め込まれています。

例えば、こんな感じです。

<?php
function my_theme_next_previous_post_link() {
    if ( is_single() ) {
        if( is_attachment() ) {
        ?>
            <ul class="default-wp-page clearfix">
                <li class="previous"><?php previous_image_link( false, __( '← Previous', 'attitude' ) ); ?></li>
                <li class="next"><?php next_image_link( false, __( 'Next →', 'attitude' ) ); ?></li>
            </ul>
        <?php
        }
        else {
        ?>
            <ul class="default-wp-page clearfix">
                <li class="previous"><?php previous_post_link( '%link', '<span class="meta-nav">' . _x( '←', 'Previous post link', 'attitude' ) . '</span> %title' ); ?></li>
                <li class="next"><?php next_post_link( '%link', '%title <span class="meta-nav">' . _x( '→', 'Next post link', 'attitude' ) . '</span>' ); ?></li>
            </ul>
        <?php
        }
    }
}
?>

たったこれだけのソースコード内に、PHPの開始タグと終了タグが7組記述されています。このコードが記述されているファイルはPHPのファイル(拡張子は.php)なのですが、PHPの開始タグと終了タグを頻繁に呼び出して、どちらかと言うとHTMLの中にPHPのコードを埋め込むスタイルになっています。PHPは元々このスタイルから始まった言語です。

一方で、HTMLのデータを文字列として変数に格納し、関数の最後でその文字列を return で返す形にする方法もあります。この場合は、画面に文字列を出力する最後の最後で echo を使う仕組みにするでしょう(テンプレートの仕組みを持ったWebアプリケーションであれば、大抵そうなっています)。

以下がその例です。

<?php
function foo()
{
    $previous_image_link = "xxxxx";
    $next_image_link = "yyyyy";

    $html = <<<EOT
        <ul class="default-wp-page clearfix">
            <li class="previous">{$previous_image_link}</li>
            <li class="next">{$next_image_link}</li>
        </ul>
EOT;

    return $html;
}

ただ WordPress はそういった仕組みにはなっていません。
例えば、この中にある previous_image_link() は、WordPressが内部で持っている関数ですが、この関数の実装を追っていくと、echo が実行されており、標準出力に文字列が出力されています。ですので、previous_image_link()を呼び出す側で、HTMLデータを文字列として変数に格納するスタイルにしたくても、あまり意味がありません。出力制御関数を使えばできないことはないですが、わざわざそんなことはしないと思います。ということで、WordPressのPHPコードを書く場合は、「HTMLにPHPを埋め込むスタイル」になるのです。

以前、私は WordPressがこの古いスタイルのコードであることに良いイメージを持っていなかったのですが、最近では「開発者の自己満足よりも、使う側の便利さを優先している」と感じるようになりました。私も年を取ったということでしょうか。

📂-プログラミング
-, ,

執筆者:labo


comment

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

関連記事

web development

Resource Timing API を使って、リソースの読み込みに掛かった時間を計測する

目次1. Resource Timing API について2. サンプルコード3. PerformanceResourceTiming インターフェイス4. デモページ5. 参考仕様MDNブラウザの対 …

WordPress

plugin-update-checker を使って WordPress のテーマに自動更新機能を実装する

目次1. はじめに2. テーマディレクトリに対する準備作業3. テーマを更新する手順3-1. テーマ提供者側3-2. 利用者側4. おわりに 1. はじめに plugin-update-checker …

Web Programming

ブラウザがウェブサーバーに送っている情報を表示するウェブページを作ってみよう(HTML/CSS/JavaScript/PHP)

目次1. はじめに2. この記事の対象とする人3. 今回の題材となるWebページとファイル3-1. 作成するページ3-2. 今回の題材となるファイルファイルのダウンロードファイルを閲覧するファイルの中 …

React Redux

React と Redux を使ったウェブページのサンプルその1

React と Redux を使ってウェブページのサンプルを作ってみました。以下のURLからアクセスすることがでます。 デモページ 🔗 React + Redux のサンプル002 こ …

Web

WSL (Ubuntu16.04.4 LTS) 上の Python から、Selenium を利用して Windows側のウェブブラウザを操作する

WSL (Windows Subsystem for Linux) の環境 (Ubuntu 16.04.4 LTS) にインストールされている Python を使い、Windows 側のウェブブラウザ …