Existe-t-il un plugin WordPress qui enregistre un fichier de plugin en tant que modèle de page personnalisé?

9

Je dois créer un plug-in qui rend les modèles de page personnalisés disponibles dans wp-admin. Je me demande si quelqu'un a déjà abordé cette question, car cela semble être un processus assez typique?

    
posée jnthnclrk 16.11.2010 - 19:02

4 réponses

7

Comme Rarst a répondu, vous pouvez réellement le faire sans modifier les fichiers core ni supprimer les attributs de page metabox et créer votre sur en utilisant le même code avec un peu de modification. le code ci-dessous est le code pour /admin/include/meta-boxes.php et j'ai ajouté le commentaire pour indiquer où iraient vos options de modèles de page supplémentaires:

function page_attributes_meta_box($post) {
    $post_type_object = get_post_type_object($post->post_type);
    if ( $post_type_object->hierarchical ) {
        $pages = wp_dropdown_pages(array('post_type' => $post->post_type, 'exclude_tree' => $post->ID, 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
        if ( ! empty($pages) ) {
        ?>
        <p><strong><?php _e('Parent') ?></strong></p>
        <label class="screen-reader-text" for="parent_id"><?php _e('Parent') ?></label>
        <?php echo $pages; ?>
        <?php
        } // end empty pages check
    } // end hierarchical check.
    if ( 'page' == $post->post_type && 0 != count( get_page_templates() ) ) {
        $template = !empty($post->page_template) ? $post->page_template : false;
        ?>
        <p><strong><?php _e('Template') ?></strong></p>
        <label class="screen-reader-text" for="page_template"><?php _e('Page Template') ?></label><select name="page_template" id="page_template">
        <option value='default'><?php _e('Default Template'); ?></option>
        <?php page_template_dropdown($template); ?>

        // add your page templates as options

        </select>
        <?php
    } ?>
    <p><strong><?php _e('Order') ?></strong></p>
    <p><label class="screen-reader-text" for="menu_order"><?php _e('Order') ?></label><input name="menu_order" type="text" size="4" id="menu_order" value="<?php echo esc_attr($post->menu_order) ?>" /></p>
    <p><?php if ( 'page' == $post->post_type ) _e( 'Need help? Use the Help tab in the upper right of your screen.' ); ?></p>
    <?php
}

Je ne sais pas s'il s'agit d'une solution dans votre cas, mais j'avais un cas plus malin lorsque je devais afficher le type de message dans un thème intégré au plugin et pour cela, j'ai utilisé add_filter('the_content', 'my-function'); et my-function a créé la sortie à afficher.

Une autre option serait de faire en sorte que votre plugin crée le fichier de modèle dans le répertoire du thème actuel, comme suit:

function create_plugins_theme_file(){
    $file_name = TEMPLATEPATH . '/' . $tamplate_name . '.php';
    $handle = fopen($file_name, 'w') or wp_die('Cannot open file for editing');
    $file_contents = <<<OUT
<?php
/*
Template Name: $tamplate_name
*/
?>

//you theme file here

OUT;

   fwrite($handle, $file_contents);
   fclose($handle);
 }

et vous pouvez l'exécuter après avoir d'abord vérifié si le fichier existe

if(!file_exists( $file_name)){create_plugins_theme_file();}

J'espère qu'une de ces solutions vous aidera.

    
réponse donnée Bainternet 07.02.2011 - 20:42
2

Je ne suis pas tout à fait sûr de comprendre ce que vous essayez d'atteindre, du moins pourquoi vous voudriez qu'un plugin le fasse.

La procédure normale pour créer différents modèles de page est la suivante:

  1. Créez un nouveau modèle de page dans votre répertoire de thème ACTIVE (faites une copie du fichier page.php).

  2. Modifiez le nom du modèle (à l'intérieur du fichier).

    / * Nom du modèle: page pleine largeur * /

  3. Modifiez le code de la page en fonction de vos objectifs.

  4. Vous pouvez maintenant créer une nouvelle page et choisir le "Modèle" à utiliser.

...

J'espèrequec'estcequevousessayezderéaliser?

Documentationofficielleici: enlace

    
réponse donnée Lars Koudal 16.11.2010 - 19:20
2

Cela semble être assez difficile à réaliser. La fonction get_page_templates() rejette activement tout ce qui ne se trouve pas dans les répertoires racine parent et enfant. Il ne stocke pas non plus dans la variable globale et ne permet pas de filtrer la liste générée de modèles.

Je pense que la méta-boîte d'attributs de page devra être fourchue et complètement remplacée pour cela. Et pas sûr que cela sera possible même alors.

Je conviens que cela semble logique, mais le code WordPress est très précis dans la mesure où il veut que les modèles nommés ne proviennent que du répertoire du thème.

    
réponse donnée Rarst 23.01.2011 - 17:23
1

N'est-ce pas l'une des raisons pour lesquelles register_theme_directory() a été introduit?

enlace

À l'époque, il s'agissait d'un problème lié à BuddyPress, qui souhaitait ajouter des modèles supplémentaires ici et là.

Je suppose qu'ils ne sont pas correctement répertoriés en tant que modèles de page, cependant:

enlace

    
réponse donnée Denis de Bernardy 07.02.2011 - 21:02

Lire d'autres questions sur les étiquettes