web-dev-qa-db-ja.com

プラグインでカスタム投稿タイプの代替テンプレートを設定する方法

私のカスタムプラグインはカスタム投稿タイプを作成します、そして私は私自身の"single-my_custom_cpt.php"ファイルをテーマにしたいです。しかし、私は自分のプラグインフォルダにそれを保存し、それがウェブサイトのアクティブなテーマフォルダに上書きされることを可能にしたいです。

たとえば、single-my_custom_cpt.phpが/plugins/my-plugin/フォルダーに存在し、誰かが/themes/site-theme/single-my_custom_cpt.phpを作成します。テーマファイルを最初に表示し、それが削除された場合はプラグインファイルを表示するようにします。

4
willbeeler

リンクされた質問が示唆するように、テーマフックによってtemplate_includeに上書きされることができるデフォルトのテンプレートを提供すること。あなたはWordPressがパラメータとして使いたいテンプレートを手に入れます。それが目的のファイルではない場合は、プラグインのファイルに置き換えます。

add_filter( 'template_include', 'wpse_57232_render_cpt', 100 );

/**
 * Provide fall back template file for a custom post type single view.
 *
 * @return void
 */
function wpse_57232_render_cpt( $template )
{
    // Our custom post type.
    $post_type = 'my_custom_cpt';

    // WordPress has already found the correct template in the theme.
    if ( FALSE !== strpos( $template, "/single-$post_type.php" ) )
    {
        // return the template in theme  
        return $template;
    }

    // Send our plugin file.
    if ( is_singular() && $post_type === get_post_type( $GLOBALS['post'] ) )
    {
        // return plugin file
        return dirname( __FILE__ ) . "/single-$post_type.php";
    }

    // Not our post type single view.
    return $template;
}
7
fuxia