Je souhaite ajouter des modèles de page à un thème directement à partir du plug-in. L'idée est que le modèle apparaisse dans la liste déroulante sous Attributs de page et que tout le code doit être dans le plug-in.
Des conseils sur comment y parvenir?
Vous pouvez utiliser le filtre theme_page_templates
pour ajouter des modèles à la liste déroulante des modèles de page, comme suit:
function wpse255804_add_page_template ($templates) {
$templates['my-custom-template.php'] = 'My Template';
return $templates;
}
add_filter ('theme_page_templates', 'wpse255804_add_page_template');
Maintenant, WP recherchera my-custom-template.php
dans le répertoire du thème, vous devrez donc le rediriger vers votre répertoire de plugin en utilisant le filtre page_template
comme ceci:
function wpse255804_redirect_page_template ($template) {
if ('my-custom-template.php' == basename ($template))
$template = WP_PLUGIN_DIR . '/mypluginname/my-custom-template.php';
return $template;
}
add_filter ('page_template', 'wpse255804_redirect_page_template');
En savoir plus sur ceci ici: Ajouter une page de modèle personnalisée par programme
Du codex:
<?php
$templates = get_page_templates();
foreach ( $templates as $template_name => $template_filename ) {
echo "$template_name ($template_filename)<br />";
}
?>
Vous obtenez ensuite utiliser les modèles actuels et les ajouter par programme à ce que vous souhaitez.
Ceci est une combinaison de la réponse ci-dessus et des commentaires ci-dessus qui ont fini par travailler pour moi.
La fonction pour ajouter le plugin à la liste des modèles disponibles:
function wpse255804_add_page_template ($templates) {
$templates['my-custom-template.php'] = 'My Template';
return $templates;
}
add_filter ('theme_page_templates', 'wpse255804_add_page_template');
La fonction pour diriger le modèle vers le répertoire approprié dans le plugin:
function wpse255804_redirect_page_template ($template) {
$post = get_post();
$page_template = get_post_meta( $post->ID, '_wp_page_template', true );
if ('my-custom-template.php' == basename ($page_template))
$template = WP_PLUGIN_DIR . '/mypluginname/my-custom-template.php';
return $template;
}
add_filter ('page_template', 'wpse255804_redirect_page_template');