web-dev-qa-db-ja.com

カスタム投稿タイプを作成してプラグインでカスタム投稿テンプレートを取得する方法

私はregister_post_typeを使ってカスタムの投稿タイプ( 'events')を追加するプラグインを書いています。さらに、通常のsingle.phpの代わりにsingle-event.phpを使いたいと思います。プラグインフォルダの現在の構造は次のとおりです。

  • plugin-main-file.php
  • single-event.php

私はそれを私のテーマディレクトリの中に置いておけばそれが可能であることを知っています、しかし私はそれをプラグインの中に置いてそれを利用したいです。どうすればいいのですか?そのためのカスタム関数はありますか?

3
Sandeep
function get_custom_post_type_template($single_template) {
     global $post;

     if ($post->post_type == 'events') {
          $single_template = dirname( __FILE__ ) . '/single-event.php';
     }
     return $single_template;
}
add_filter( 'single_template', 'get_custom_post_type_template' );

出典

またはあなたが使用することができます:

add_filter( 'template_include', 'single_event_template', 99 );

function single_event_template( $template ) {

    if ( is_singular('event') ) {
        $new_template = locate_template( array( 'single-event.php' ) );
        if ( '' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}

出典

または locate_template を使うこともできます

1
Brad Dalton

これは私がいつもやっていることです。あなたが$ wp_queryと$ postの両方を必要としているかどうかわからないが、それはいつも私のために働いた。

これをplugin-main-file.phpに入れるだけです。

/**
 * Add single template for events post type plugin
 */
function custom_template_events_post_type_plugin($single) {
      global $wp_query, $post;
      if ($post->post_type == "events"){
        $template = dirname( __FILE__ ) . '/single-event.php';
        if(file_exists( $template ))
            return $template;
      }
        return $single;
    }
    add_filter('single_template', 'custom_template_events_post_type_plugin');
1
Bryan Willis