プログラミング

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 Components

Web Components: 組み込み要素を拡張する方法

目次1. はじめに2. 組み込みHTML要素を拡張する方法3. おわりに4. 参考 1. はじめに Web Components では、HTMLElement を継承してカスタムクラスを定義することも …

Python

定期的にツイートするbotをPythonで作る方法

Twitterでツイートを行う botプログラムを Python(プログラミング言語)で作ります。 このプログラムは、CentOS(Linuxの一種です)上で定期実行します。 スポンサードリンク 目次 …

React Redux

React + Redux のチュートリアルをやってみた

目次1. はじめに2. Redux について2. Action と Action CreatorActionAction Creators関連ソースコードactions/index.jscontain …

Babel とは?

目次1. Babel とは?2. JavaScript のバージョン3. プラグイン (plugins)4. プリセット (preset)5. 基本的な使い方6. Babel のイメージ 1. Bab …

e-Stat API の利用に関するメモ

政府統計の総合窓口(e-Stat)−API機能 の利用に関するメモです。 政府統計の総合窓口(e-Stat)では、統計データ等が提供されており、プログラムで取得する事ができます。 気付いたこと 政府統 …