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


9

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


Je ne comprends pas très bien la question. Vous voulez un plugin qui insère des modèles personnalisés définis dans le plugin?
Steven

Réponses:


7

Comme Rarst a répondu, vous pouvez vraiment le faire sans modifier les fichiers de base ou supprimer la métabox des attributs de page et créer votre en utilisant le même code avec un peu de modification. le code ci-dessous est le code de /admin/include/meta-boxes.php et j'ai ajouté un commentaire pour montrer où iraient vos options de modèle de page supplémentaire:

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 si c'est un correctif dans votre cas, mais j'avais un cas de smiler quand j'avais besoin d'afficher le type de message dans un thème intégré de plugin et pour cela j'ai utilisé add_filter('the_content', 'my-function'); et ma fonction a créé la sortie à afficher.

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

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 que cela vous aidera.


Testera les trucs de la boîte de méta, bus selon ma réponse - ce n'est qu'une partie du problème, l'autre est - du code qui essaie de charger le modèle uniquement s'il est dans le répertoire du thème. Donc, fournir un fichier modèle "externe" peut ne pas être suffisant pour le charger.
Rarst

c'est pourquoi j'ai suggéré que le plugin crée les fichiers dans le répertoire du thème.
Bainternet

2

Je ne suis pas tout à fait sûr de comprendre ce que vous essayez de réaliser, 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 ACTIF (faites une copie de page.php).

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

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

  3. Remplacez le code de la page par ce que vous essayez de réaliser.

  4. Vous pouvez maintenant créer une nouvelle page et choisir le «modèle» à utiliser.

texte alternatif

...

J'espère que c'est ce que vous essayez de réaliser?

Documentation officielle ici: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates


Woops. exemple de code PHP est un peu foiré. Visitez le lien pour un exemple de code approprié.
Lars Koudal

2
Intéressé à savoir si quelqu'un utilise la méthode de Jan dans un plugin existant: wordpress.stackexchange.com/questions/3396/…
jnthnclrk

Je crois que @trnsfrmr cherche un moyen de créer un modèle de page prédéfini (étapes 1 à 3) dans son propre plugin pour rendre ce modèle disponible pour les utilisateurs après l'activation du plugin. Je suppose qu'il veut garder ce thème de solution indépendant.
Michal Mau

Ah, d'accord, j'ai mal compris un peu là, merci pour la clarification :-)
Lars Koudal

2

Cela semble assez difficile à réaliser. get_page_templates()La fonction supprime activement tout ce qui ne se trouve pas dans les répertoires racine parent et enfant. Il ne stocke pas non plus dans une variable globale ni ne permet 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 je ne suis pas sûr que ce sera possible même alors.

Je suis d'accord que cela semble logique, mais le code WordPress est très précis en ce sens qu'il veut que les modèles nommés proviennent uniquement du répertoire du thème.


1

N'est-ce pas l'une des raisons qui ont register_theme_directory()été introduites?

http://core.trac.wordpress.org/ticket/10467

À l'époque, c'était un problème lié à BuddyPress, qui voulait lancer 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:

http://core.trac.wordpress.org/ticket/15803


Je vais passer en revue le code (probablement demain), mais pour autant que je me souvienne, les modèles avec des noms sont explicitement recherchés uniquement via les constantes de chemin.
Rarst
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.