Je développe un plugin qui utilise des types de post personnalisés et des taxonomies. Ma question est la suivante. Comment puis-je charger les données de contenu/thème de mon plug-in sur la page lorsque vous accédez à l'URL personnalisée de la taxonomie?
MODIFIER
J'essaie d'utiliser les fichiers de modèle du plug-in et non les thèmes de mon taxon personnalisé.
Tout d'abord - les plugins servent à générer du contenu, les thèmes permettent de l'afficher . Donc, vraiment, un plugin ne devrait pas faire ça. Mais il existe des zones grises - par exemple, dans un plug-in lié à "événements", il serait souhaitable d'afficher les dates, le lieu, etc. - des éléments qu'un thème WordPress ne devrait pas afficher normalement.
Je voudrais suggerer
Pour modifier le modèle utilisé, vous pouvez utiliser le filtre template_include
. Ceci est un exemple pour les modèles de taxonomie, mais un processus similaire est possible pour les types de publication personnalisés.
add_filter('template_include', 'wpse50201_set_template');
function wpse50201_set_template( $template ){
//Add option for plugin to turn this off? If so just return $template
//Check if the taxonomy is being viewed
//Suggested: check also if the current template is 'suitable'
if( is_tax('event-venue') && !wpse50201_is_template($template))
$template = plugin_dir_url(__FILE__ ).'templates/taxonomy-event-venue.php';
return $template;
}
Remarque il suppose que les modèles de plug-in se trouvent dans un sous-dossier de modèle relatif au directeur actuel.
Ceci vérifie simplement que la taxonomie "lieu de l'événement" est visualisée. Sinon, il utilisera le modèle d'origine.
La fonction wpse50201_is_template
vérifiera si le modèle que WordPress a choisi dans le thème/thème-enfant s'appelle taxonomy-event-venue.php
ou taxonomy-event-venue-{term-slug}.php
. Si c'est le cas, le modèle d'origine sera utilisé.
Cela permet aux utilisateurs de votre plugin de les copier dans leur thème et de les éditer, et le plugin donnera la priorité aux modèles theme/child-theme. Ce n'est que s'il ne parvient pas à les trouver qu'il revient aux modèles de plug-in.
function wpse50201_is_template( $template_path ){
//Get template name
$template = basename($template_path);
//Check if template is taxonomy-event-venue.php
//Check if template is taxonomy-event-venue-{term-slug}.php
if( 1 == preg_match('/^taxonomy-event-venue((-(\S*))?).php/',$template) )
return true;
return false;
}
J'ai utilisé cette méthode dans un plugin - vous pouvez voir un exemple de travail de ce qui précède ici .
C'est ainsi que j'appelle un modèle de taxonomie depuis un sous-répertoire de mon dossier de thèmes. Gardez à l'esprit que taxonomy.php
devra rester dans votre répertoire de thème racine.
function call_taxonomy_template_from_directory(){
global $post;
$taxonomy_slug = get_query_var('taxonomy');
load_template(get_template_directory() . "/templates-taxonomy/taxonomy-$taxonomy_slug.php");
}
add_filter('taxonomy_template', 'call_taxonomy_template_from_directory');
Par exemple, ma taxonomie s'appelle 'news-category'. Le modèle est situé à wp-content/themes/mytheme/templates-taxonomy/taxonomy-news-category.php