プラグイン内からカスタムページテンプレートを作成する方法を探して、過去数時間を探していましたが、まだ運がありません。
私は特にやるしようとしていると、ページを編集する際に利用可能なページテンプレートのリストにオプションを追加し、あるいないようないくつかの他の方法を使用してif( is_page( 'page-slug' ) ) { /* etc */ }
これを行うために変更できるグローバル変数はありますか?
編集:
@ m0r7if3rがコメントで私に与えたリンクに基づいて、私は現在このコードを使用していますが、問題は、ページの表示時にこの関数を実行しますが、ページの編集時には実行しません(ドロップダウンリストにページテンプレートを入力するため)。 :
class JW_SiteGrader {
    private static $instance;
    private function __construct() {
        add_action( 'template_redirect', array( &$this, 'sitegrader_template_redirect' ), 20 );
    }
    public static function getInstance() {
        // Return the class data in a Singleton fashion
        if (self::$instance == null)
            self::$instance = new JW_SiteGrader();
        return self::$instance;
    }
    public function sitegrader_template_redirect() {
        add_filter( 'page_template', array( &$this, 'sitegrader_page_template' ), 10, 1 );
    }
    public function locate_plugin_template( $template_names, $load = false, $require_once = true ) {
        if ( !is_array( $template_names ) )
            return '';
        $located = '';
        $this_plugin_dir = WP_PLUGIN_DIR . '/' . str_replace( basename( __FILE__ ), '', plugin_basename( __FILE__ ) );
        foreach ( $template_names as $template_name ) {
            if ( !$template_name )
                continue;
            if ( file_exists( STYLESHEETPATH . '/' . $template_name ) ) {
                $located = STYLESHEETPATH . '/' . $template_name;
                break;
            } else if ( file_exists( TEMPLATEPATH . '/' . $template_name ) ) {
                $located = TEMPLATEPATH . '/' . $template_name;
                break;
            } else if ( file_exists( $this_plugin_dir .  $template_name ) ) {
                $located =  $this_plugin_dir . $template_name;
                break;
            }
        }
        if ( $load && '' != $located )
            load_template( $located, $require_once );
        return $located;
    }
    public function sitegrader_page_template( $template ) {
        $object = get_queried_object();
        if ( 'page' == $object->post_type ) {
            // New 
            $templates[] = "page-sitegrader.php";
            // Like in core
            $templates[] = "page-{$object->post_type}.php";
            $templates[] = "page.php";
            return locate_template( $templates );  
        }
        // return apply_filters('page_template', $template);
        return $template;
    }
}編集2:
この機能は将来のアップデートでリリースされるようです。私はこれについてかなりの数のtracチケットを読み、議論がありましたが、実際の答えはありません(3.4を期待しています)。tracチケットのURLをここにリストします。
編集3:
上記のコードは機能しますが、この時点で私が抱えている唯一の問題は、新しいページを編集または追加するときに、ドロップダウンリストにテンプレートが追加されないことです。私はいくつかのことを試みていますが、質問はすぐに更新されます。
page_templateフックを使用しています。編集中の上記のコードは現在使用されているものです。template_redirectフックを使用してからpage_templateフィルターを追加する必要がありますか?