web-dev-qa-db-fra.com

Comment puis-je charger un modèle de page à partir d'un plugin?

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?

4
smartcat

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

7
cjbj

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.

0
Svartbaard

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');
0
TKEz