web-dev-qa-db-ja.com

テーマのfunctions.phpにファイルを含めてもうまいかないのはなぜですか?

例えば、私が私のテーマのfunctions.phpに何らかのコードを書く(例えばカスタム投稿タイプを追加するか何か)なら、それはうまく機能します。私がそれを新しいファイルに移動して、それから私のテーマのfunctions.phpファイルの中のinclude()ファイルを動かしても、それはもはや機能しません(しかしerror_log()を使ったデバッグコードはまだ機能します)。

例えば.

これはfunctions.phpです:

<?php
// ###### functions.php ######
error_log("fu_debug: Including the post type.");

add_action('init', 'fu_create_project_post_type');
function fu_create_project_post_type() {
    error_log("fu_debug: create project post type");

    register_post_type( 'fu_project',
        array(
            'labels' => array(
                'name' => __( 'Projects' ),
                'singular_name' => __( 'Project' )
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'projects'),
        )
    );
}
?>

それはうまくいきます。では、functions.phpをこれに変更すると、

<?php
// ###### functions.php ######
include "newfile.php";
?>

そして、このようにnewfile.phpの中にコードを置きます。

<?php
// ###### newfile.php ######
error_log("fu_debug: Including the post type.");

add_action('init', 'fu_create_project_post_type');
function fu_create_project_post_type() {
    error_log("fu_debug: create project post type");

    register_post_type( 'fu_project',
        array(
            'labels' => array(
                'name' => __( 'Projects' ),
                'singular_name' => __( 'Project' )
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array('slug' => 'projects'),
        )
    );
}
?>

コードは機能しなくなりましたが、error_log()メッセージはログに表示されたままです。

エラーメッセージはまだ機能しますが、ワードプレスコードは機能しません。

3
trusktr

functions.phpにファイルを含めるときは、get_template_directory()を使用して正しいファイルパスを参照する必要があります。

include( get_template_directory() . '/newfile.php' );
5
Chip Bennett

これは、PARENTテーマに戻ります。
require_once( get_template_directory() . '/include/myscript.php' );

CHILDテーマを使うなら(そしてあなたはそうすべきです!)、これを使います:
require_once( get_stylesheet_directory() . '/include/myscript.php' );

0
bshea