プラグインファイルをカスタムページテンプレートとして登録するWordPressプラグインはありますか?


9

カスタムページテンプレートをwp-adminで利用できるようにするプラグインを作成する必要があります。かなり典型的なプロセスのように思われるので、誰かがすでにこれに取り組んでいるのではないでしょうか。


質問がよくわかりません。プラグインで定義されたカスタムテンプレートを挿入するプラグインが必要ですか?
スティーブン

回答:


7

Rarstが答えたように、コアファイルを編集したり、ページ属性のメタボックスを削除したりせずに、実際にそれを行うことができ、少し変更を加えた同じコードを使用して作成できます。以下のコードは/admin/include/meta-boxes.phpのコードで、コメントを追加して、追加のページテンプレートオプションの場所を示しています。

function page_attributes_meta_box($post) {
    $post_type_object = get_post_type_object($post->post_type);
    if ( $post_type_object->hierarchical ) {
        $pages = wp_dropdown_pages(array('post_type' => $post->post_type, 'exclude_tree' => $post->ID, 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
        if ( ! empty($pages) ) {
        ?>
        <p><strong><?php _e('Parent') ?></strong></p>
        <label class="screen-reader-text" for="parent_id"><?php _e('Parent') ?></label>
        <?php echo $pages; ?>
        <?php
        } // end empty pages check
    } // end hierarchical check.
    if ( 'page' == $post->post_type && 0 != count( get_page_templates() ) ) {
        $template = !empty($post->page_template) ? $post->page_template : false;
        ?>
        <p><strong><?php _e('Template') ?></strong></p>
        <label class="screen-reader-text" for="page_template"><?php _e('Page Template') ?></label><select name="page_template" id="page_template">
        <option value='default'><?php _e('Default Template'); ?></option>
        <?php page_template_dropdown($template); ?>

        // add your page templates as options

        </select>
        <?php
    } ?>
    <p><strong><?php _e('Order') ?></strong></p>
    <p><label class="screen-reader-text" for="menu_order"><?php _e('Order') ?></label><input name="menu_order" type="text" size="4" id="menu_order" value="<?php echo esc_attr($post->menu_order) ?>" /></p>
    <p><?php if ( 'page' == $post->post_type ) _e( 'Need help? Use the Help tab in the upper right of your screen.' ); ?></p>
    <?php
}

これがあなたのケースの修正であるかどうかはわかりませんが、プラグインの組み込みテーマで投稿タイプを表示する必要があり、そのために使用add_filter('the_content', 'my-function'); したmy-functionが表示する出力を作成したときに、微笑みのケースがありました。

別のオプションは、次のように、プラグインに現在のテーマディレクトリにテンプレートファイルを作成させることです。

function create_plugins_theme_file(){
    $file_name = TEMPLATEPATH . '/' . $tamplate_name . '.php';
    $handle = fopen($file_name, 'w') or wp_die('Cannot open file for editing');
    $file_contents = <<<OUT
<?php
/*
Template Name: $tamplate_name
*/
?>

//you theme file here

OUT;

   fwrite($handle, $file_contents);
   fclose($handle);
 }

ファイルが存在するかどうかを最初に確認した後でこれを実行できます

if(!file_exists( $file_name)){create_plugins_theme_file();}

このいずれかがお役に立てば幸いです。


メタボックスのものをテストします。私の答えのとおり、バスは問題の一部に過ぎません。その他は、テンプレートがテーマディレクトリにある場合にのみテンプレートをロードしようとするコードです。したがって、「外部」テンプレートファイルを提供するだけでは、それをロードするのに十分ではない可能性があります。
Rarst

そのため、テーマのディレクトリにプラグインでファイルを作成するように提案しました。
Bainternet、2011

2

私はあなたが何を達成しようとしているのか、少なくともなぜプラグインがそれをしたいと思うのかを完全に理解しているわけではありません。

異なるページテンプレートを作成する通常の手順は次のとおりです。

  1. アクティブなテーマディレクトリに新しいページテンプレートを作成します(page.phpのコピーを作成します)。

  2. テンプレートの名前を(ファイル内で)変更します。

    / *テンプレート名:全幅ページ* /

  3. ページのコードを、達成しようとしているものに変更します。

  4. これで、新しいページを作成して、使用する「テンプレート」を選択できます。

代替テキスト

...

それがあなたが達成しようとしていることを願っていますか?

ここの公式ドキュメント:http : //codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates


おっと。サンプルPHPコードは少しめちゃくちゃです。適切なコード例については、リンクにアクセスしてください。
Lars Koudal、2010年

2
誰もが既存のプラグイン1月のメソッドを使用している場合を知りたい:wordpress.stackexchange.com/questions/3396/...
jnthnclrk

@trnsfrmrは、自分のプラグイン内に事前定義されたページテンプレート(ステップ1〜3)を作成して、プラグインをアクティブ化した後にユーザーがこのテンプレートを使用できるようにする方法を探していると思います。彼はこのソリューションのテーマを独立させたいと考えています。
Michal Mau


2

これを達成するのはかなり難しいようです。get_page_templates()functionは、親および子ルートディレクトリにないものはすべて積極的に破棄します。また、グローバル変数に保存したり、生成されたテンプレートのリストをフィルタリングしたりすることもできません。

これを行うには、ページ属性メタボックスをフォークして完全に置き換える必要があると思います。それでもそれが可能になるかどうかはわかりません。

これは理にかなったことのように思われますが、WordPressコードは、名前付きテンプレートがテーマのディレクトリからのみ取得されるようにしたいという点で非常に正確です。


1

これregister_theme_directory()は導入された理由の1つではありませんか?

http://core.trac.wordpress.org/ticket/10467

当時は、あちこちに追加のテンプレートを追加したかったBuddyPressに関連する問題でした。

ただし、これらはページテンプレートとして適切にリストされていないとします。

http://core.trac.wordpress.org/ticket/15803


私はコードを(おそらく明日)調べますが、覚えている限り、名前の付いたテンプレートはパス定数のみを介して明示的に検索されます。
Rarst
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.