web-dev-qa-db-fra.com

Comment définir un modèle de secours pour un type de message personnalisé dans un plugin?

Mon plugin personnalisé crée un type de publication personnalisé et je souhaite thématiser mon propre fichier "single-my_custom_cpt.php". Cependant, je souhaite le stocker dans mon dossier de plug-in et permettre qu'il soit écrasé dans le dossier de thème actif des sites Web.

Single-my_custom_cpt.php, par exemple, existe dans le dossier /plugins/my-plugin/ et quelqu'un crée /themes/site-theme/single-my_custom_cpt.php. Je veux que le fichier de thème apparaisse en premier, et s'il est supprimé, le fichier de plugin apparaisse.

4
willbeeler

Fournir un modèle par défaut pouvant être écrasé par un crochet de thème dans template_include, comme le suggèrent les questions liées. Vous obtenez le modèle que WordPress souhaite utiliser en tant que paramètre. Si ce n’est pas le fichier que vous voulez, remplacez-le par le fichier de votre plugin:

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