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é cette question, car cela semble être un processus assez typique?
Comme Rarst l'a répondu, vous pouvez réellement le faire sans modifier les fichiers de base 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 quand j'avais besoin d'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 ma fonction 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, 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 aidera.
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:
Créez un nouveau modèle de page dans votre répertoire de thème ACTIVE (faites une copie de page.php).
Changer le nom du modèle (à l'intérieur du fichier).
/ * Nom du modèle: Full Width Page * /
Changez le code de la page en ce que vous essayez d’atteindre.
Vous pouvez maintenant créer une nouvelle page et choisir le "Modèle" à utiliser.
...
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
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 ce sera possible même alors.
Je conviens que cela semble logique, mais le code WordPress est très précis car il veut que les modèles nommés ne proviennent que du répertoire du thème.
N'est-ce pas l'une des raisons pour lesquelles register_theme_directory()
a été introduit?
http://core.trac.wordpress.org/ticket/10467
À 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: