サポート » WordPress への貢献と参加 » テンプレートファイルから、includeは、正しい方法ですか?

  • 解決済 nobita

    (@nobita)


    こんにちは
    http://wpdocs.sourceforge.jp/%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AB%E3%83%BC%E3%83%89%E3%82%BF%E3%82%B0

    WordPress には、これらの特定のテンプレートを読み込むために上記のタグがありますが、どのようなファイルでも読み込める便利な方法もあります。それには、PHP の include 文と、誰にでも簡単に使えるよう WordPress で定義されている定数 TEMPLATEPATH を使います。
    仮に header2.php というファイルを読み込みたいとしましょう。このファイルの内容を表示したいテンプレートの中に、次の行を挿入するだけです。

    PHPのincludeを推奨するような記述がありますが、英語版にはありません

    これは、正しい方法ですか?

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    日本語版がv2.7から更新されていないですね、、、
    多分今だと、get_template_partを使うってことになってるんじゃないですかねぇ??

    (・・・って、ここに返答していいのかな?)

    こんにちは

    回答ありがとうございます。

    theme checkというプラグインを使って、コードのバリデーションを行っているのですが、
    テンプレートでincludeを使った場合、

    The theme appears to use include or require. If these are being used to include separate sections of a template from independent files, then get_template_part() should be used instead.

    というエラーが出ます。

    私自身も、include関数を使わずに、コードを書いてきたのですが、functions.phpが自分が公開しているRaindropsというテーマで3500行を超えてしまったので、ファイルを分割する必要に迫られるようになりました。

    この過程で、includeとget_template_partの挙動の違いがあり、includeを使う検討を始めました。

    使えるかどうか確認するため、

    ワードプレスのテーマレビュアーで有名な(と私は思っているのですが)Chip Bennet氏のテーマを参照し、functions.phpでrequire()が使われていた、(以前は、使われていなかったと思うのですが)

    theme checkプラグインでfunctions.phpに書いた、includeがエラーになるかどうか試したが、エラーは出ない

    2点を確認し、使うことにしました。

    私、英語が不得手なので、冒頭のエラーメッセージの意味合いを正しく把握しておきたいと思っていました(コードの書き方が変わるので、、、)

    そこに、日本語コーデックスで、includeが便利な関数として独自に取り上げられていたので、これは正しいのですか?と問えば、なにか答えに近づけるかもと思い質問してしまったのですが、「この質問おかしいな」とも思い、真意を説明させていただきます

    よろしくお願いします。

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    すみません。。。以下、PHP書けない者が推測で書いてしまいます。
    (えらいひとの登場に期待しつつ、失礼します)

    上掲の英語のエラーメッセージは、
    「requireやincludeがあるみたいだけど、get_template_part()を代わりに使った方がいいよ」
    という意味ですよね。

    WordPress独自のテンプレートタグがあるならそれを使えばいいのでしょうが、
    それで実現できない場合は一般的なPHPのお作法にのっとったものを書けば良い、という頭でいます。
    なので正しくない、ということはないと思ってます。
    エラーメッセージも、「警告」じゃなく「注意」であり、わかっていて使うなら良いのかと思うのですが、どうでしょう?

    mypacecreatorさん

    すみません。。。以下、PHP書けない者が推測で書いてしまいます。

    私のほうこそ、手を煩わせて申し訳ないと思います。
    自己紹介ですが、私、PHPも、得意ではありません。だから多分あんなに長いコードで、ワードプレスの公式テーマとして認めてもらうために、40回近いアップロードをして、やっとこさ、公式テーマにしてもらった、超のつくあほです。

    それで実現できない場合は一般的なPHPのお作法にのっとったものを書けば良い、という頭でいます。
    なので正しくない、ということはないと思ってます。

    私は、アホなだけでなく節操がありません。だから、テーマ内のファイルに対してinclude使っていいんだと思うと、とんでもないことをはじめます。

    実際に私は、以下のようなコードを書いてテーマの審査に出すほどだったのです
    もちろん、ぴしゃりとやられましたけど

    <?php
    
        $config_dir = dirname(dirname(dirname(dirname(dirname(__FILE__)))));
    
        if(file_exists($config_dir.'/wp-config.php')){
            require_once($config_dir.'/wp-config.php');
        }else{
            require_once(dirname($config_dir).'/wp-config.php') or die("error");
        }
    
        $table = $table_prefix.'options';
    
        $link = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
        $sdb = mysql_select_db(DB_NAME,$link);
        $sql = 'SELECT * FROM <code>'.$table.'</code> WHERE <code>option_name</code> LIKE \'_raindrops_indv_css\'';
        $result = mysql_query($sql, $link);
        $rows = mysql_fetch_row($result);
    
    header('Content-type: text/css');
        echo $rows[3];
    ?>

    エラーメッセージも、「警告」じゃなく「注意」であり、わかっていて使うなら良いのかと思うのですが、どうでしょう?

    ごめんなさい ワードプレスに精通した人達から、考え方を学びたかったのです。

    テーマ内のファイルなら、問題ないと思っていますが、上のコードにあるように、コアファイルのパスを想定して、インクルードするようなコードは書くべきではないと思っています。
    テーマファイルは、非アクティブでも、ファイルにアクセスができますから、まずいでしょ
    という理解なんですが、自分で使うことにして、おかしなことを言いますが、なんで、functions.phpからだったら沈黙するんですかね?(プラグインの問題かもしれないですけど)

    こんにちは

    書いておいたほうがいいのか少し迷いましたが、、、

    functions.phpにPHP require()を記述したテーマファイルは、extend theme レビュアーの審査を通過できたので、使ってもいいみたいでした。(テンプレートからの利用については?)

    http://wordpress.org/extend/themes/raindrops

    この機会に、get_header()と include()の 挙動の違いを、メモにしましたので、リンクをおいておきます

    WordPressのテンプレートインクルードとPHP include

    どうもありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「テンプレートファイルから、includeは、正しい方法ですか?」には新たに返信することはできません。