web-dev-qa-db-fra.com

Est-il possible de définir un modèle pour un type de publication personnalisé dans un plugin indépendant du thème actif?

J'écris un plugin pour gérer les données sur les projets open-source. J'ai développé un modèle objet et créé avec succès tous les types d'articles et toutes les taxonomies personnalisés, ainsi que mis en œuvre les fonctionnalités/rôles appropriés à l'aide du plugin Members. Les utilisateurs appropriés peuvent créer, modifier et supprimer leurs propres publications et les administrateurs peuvent les approuver, ainsi que modifier et supprimer les publications de quiconque.

Mon problème est que je veux définir le modèle pour un seul projet et pour une liste de projets (uniques et archivés, je crois - je n'ai jamais travaillé avec Wordpress à ce niveau), mais je ne veux pas que The Loop s'appuie sur sur le thème actuel pour rendre la page pour un seul projet ou une liste de projets. Si j'utilise le thème TwentyTen, je souhaite qu'il utilise le modèle de mon plugin pour ces types de publication personnalisés. Si j'utilise le thème TwentyEleven, je souhaite tout de même qu'il utilise le modèle de mon plugin pour ces types de publication personnalisés.

Je veux que cela obéisse au paradigme "ça marche tout simplement", mais pour le moment, les utilisateurs ne peuvent pas simplement laisser le dossier dans le répertoire du plugin. J'ai vérifié la hiérarchie des modèles et les noms de fichiers sont corrects, mais ils ne sont pas utilisés par Wordpress s'ils se trouvent dans le dossier du plugin ou dans le dossier plugin/templates.

Merci!

7
ZachM

Vous devez utiliser le filtre template_include, qui est le filtre générique de toutes les inclusions de modèles.

add_filter( 'template_include', 'my_plugin_templates' );
function my_plugin_templates( $template ) {
    $post_types = array( 'project' );

    if ( is_post_type_archive( $post_types ) && ! file_exists( get_stylesheet_directory() . '/archive-project.php' ) )
        $template = 'path/to/list/template/in/plugin/folder.php';
    if ( is_singular( $post_types ) && ! file_exists( get_stylesheet_directory() . '/single-project.php' ) )
        $template = 'path/to/singular/template/in/plugin/folder.php';

    return $template;
}

Je n'ai pas complètement testé le bit d'archive de type publication, vous devrez peut-être inclure une vérification à l'aide de is_tax( $taxonomies ) pour que cela fonctionne sur les archives de taxonomie personnalisée associées.

6
sanchothefat