Plugin de type de publication personnalisé: où dois-je mettre le modèle?


11

J'écris un plugin de type de publication personnalisé. Une partie de celui-ci, je le renvoie au modèle via des shortcodes. 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 inclure des fichiers de modèle dans un plugin CPT? Pouvez-vous m'indiquer des exemples particulièrement bons de la façon dont cela est fait?

Merci de votre aide.



1
Je ne sais pas si c'est un doublon, mais c'est une question subjective. La meilleure pratique pour moi serait de laisser le thème s'en occuper. Les meilleures pratiques pour les autres seraient de rendre le plugin complètement autonome.
chrisguitarguy

@JohannesPille J'ai fait une recherche avant de demander. Mais merci pour le lien. Je vais y jeter un œil.
NotoriousWebmaster

1
@chrisguitarguy D'accord. Mon problème avec le traitement du thème est que si nous changeons de thème, nous devons faire une certaine personnalisation pour accueillir le plugin. Sinon, nous perdons tout ce que le CPT apporte à la fête.
NotoriousWebmaster

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 single_templatefiltre pour désactiver le modèle. Dans votre rappel, voyez si le thème a fourni un modèle pour le type de message, s'il l'a fait, 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 le mieux cette méthode. Combinez-le avec un ensemble sain de «balises de modèle» (par exemple the_content, the_title) qui prennent en charge toutes les données personnalisées qui vont de pair avec votre type de publication et vous donnez à l'utilisateur final beaucoup de pouvoir de personnalisation ainsi que certaines valeurs par défaut du son. Bbpress fait ce genre de chose très bien: inclut des modèles utilisateur s'il les trouve et fournit beaucoup de balises de modèle.

Alternativement, vous pouvez utiliser un rappel avec the_contentfiltre et simplement changer des éléments dans le contenu lui-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;
}

Je suis d'accord avec @toscho qu'il n'y a pas de solution propre. Mais j'aime le concept d'offrir un ensemble de balises de catégorie. Je soupçonne finalement que j'aurai un dossier de thème dans mon plugin, avec un exemple de modèle CPT, et je recommande aux utilisateurs de l'adapter à leurs circonstances. J'aime aussi le filtre the_content, car il branche mon contenu dans la mise en page de l'utilisateur. Je peux implémenter les deux et permettre à l'utilisateur de choisir la voie à suivre avec une option.
NotoriousWebmaster

3

Vous pouvez vous connecter template_includeet renvoyer votre fichier de plugin si la demande concerne votre type de publication:

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.


Oui, vous avez raison, cela changerait l'apparence, y compris la disposition, les widgets et autres. Trop radical à mon goût. Mais merci.
NotoriousWebmaster
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.