Plugin de type de message personnalisé: Où placer le modèle?

11

J'écris un plugin de type message 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 citer de très bons exemples de la manière dont cela est fait?

Merci de votre aide.

    
posée NotoriousWebmaster 21.04.2013 - 17:55

2 réponses

8
  

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 désactiver le modèle. Dans votre rappel, voyez si le thème fourni un modèle pour le type de publication, s'il ne le faisait pas, 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, la meilleure. Combinez-le en fournissant 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 avec certains sons. par défaut. Bbpress fait très bien ce genre de choses: inclut des modèles d’utilisateur s’il les trouve et fournit beaucoup de balises de modèles.

Vous pouvez également utiliser un rappel avec le filtre the_content et modifier les éléments contenus 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;
}
    
réponse donnée chrisguitarguy 21.04.2013 - 18:12
3

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 changera radicalement le look. Il n'y a toujours pas de solution propre.

    
réponse donnée fuxia 21.04.2013 - 18:01

Lire d'autres questions sur les étiquettes