web-dev-qa-db-fra.com

Custom Post Type Plugin: Où dois-je placer le modèle?

J'écris un plugin de type post personnalisé. Une partie de celle-ci est exportée vers le modèle via des codes courts. Mais d'autres parties ont besoin d'un modèle de publication personnalisé et j'ai compris comment utiliser la hiérarchie des modèles pour les CPT. Mais le modèle personnalisé est dans le thème, et je pense que le plugin devrait être autonome, au moins pour commencer.

Alors, quelle est la meilleure pratique ici? Comment pouvons-nous inclure des fichiers de modèle dans un plugin CPT? Pouvez-vous me donner des exemples particulièrement bons de la façon dont cela est fait?

Merci de votre aide.

11
NotoriousWebmaster

Alors, quelle est la meilleure pratique ici?

Je dirais une combinaison de laisser le thème le gérer et de fournir un défaut avec votre plugin.

Vous pouvez utiliser le filtre single_template pour changer le modèle. Dans votre rappel, voyez si le thème a fourni un modèle pour le type de publication. Si c'est le cas, ne faites rien.

<?php
add_filter('single_template', 'wpse96660_single_template');
function wpse96660_single_template($template)
{
    if ('your_post_type' == get_post_type(get_queried_object_id()) && !$template) {
        // if you're here, you're on a singlar page for your costum post 
        // type and WP did NOT locate a template, use your own.
        $template = dirname(__FILE__) . '/path/to/fallback/template.php';
    }
    return $template;
}

J'aime cette méthode le meilleur. Associez-le à un ensemble sonore de "balises de modèle" (par exemple, the_content, the_title) qui prend en charge toutes les données personnalisées qui accompagnent votre type de publication et vous donnez à l'utilisateur final beaucoup de puissance de personnalisation ainsi que des valeurs sonores par défaut. Bbpress fait très bien ce genre de choses: inclut les modèles utilisateur s’il les trouve et fournit beaucoup de balises de modèles.

Alternativement, vous pouvez utiliser un rappel avec le filtre the_content, et simplement changer des éléments dans le contenu même.

<?php
add_filter('the_content', 'wpse96660_the_content');

function wpse96660_the_content($content)
{
    if (is_singular('your_post_type') && in_the_loop()) {
        // change stuff
        $content .= '<p>here we are on my custom post type</p>';
    }

    return $content;
}
8
chrisguitarguy

Vous pouvez vous connecter à template_include et renvoyer votre fichier de plug-in si la demande concerne votre type de message:

add_filter( 'template_include', 'insert_my_template' );

function insert_my_template( $template )
{
    if ( 'my_post_type' === get_post_type() )
        return dirname( __FILE__ ) . '/template.php';

    return $template;
}

Mais cela va changer radicalement le look. Il n'y a toujours pas de solution propre.

3
fuxia