Ich muss ein Plugin erstellen, das benutzerdefinierte Seitenvorlagen in wp-admin verfügbar macht. Ich frage mich, ob jemand dies bereits in Angriff genommen hat, da es ein ziemlich typischer Prozess zu sein scheint.
Ich muss ein Plugin erstellen, das benutzerdefinierte Seitenvorlagen in wp-admin verfügbar macht. Ich frage mich, ob jemand dies bereits in Angriff genommen hat, da es ein ziemlich typischer Prozess zu sein scheint.
Antworten:
Wie Rarst geantwortet hat, können Sie dies wirklich tun, ohne die Kerndateien zu bearbeiten oder die Metabox für Seitenattribute zu entfernen und Ihre On mit demselben Code zu erstellen, mit ein wenig Modifikation. Der folgende Code ist der Code für die Datei /admin/include/meta-boxes.php, und ich habe einen Kommentar hinzugefügt, um zu zeigen, wohin Ihre zusätzlichen Seitenvorlagenoptionen führen würden:
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
}
Ich weiß nicht, ob dies ein Fix in Ihrem Fall ist, aber ich hatte einen Smiler-Fall, als ich den Beitragstyp in einem eingebauten Plugin-Thema anzeigen musste, und dafür habe ich verwendet add_filter('the_content', 'my-function');
und meine Funktion hat die Ausgabe zum Anzeigen erstellt.
Eine andere Möglichkeit wäre, Ihr Plugin dazu zu bringen, die Vorlagendatei im aktuellen Themenverzeichnis zu erstellen.
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);
}
und Sie können dies ausführen, nachdem Sie zum ersten Mal überprüft haben, ob die Datei vorhanden ist
if(!file_exists( $file_name)){create_plugins_theme_file();}
Hoffe, eines davon hilft.
Ich bin mir nicht ganz sicher, ob ich verstehe, was Sie erreichen wollen, zumindest warum Sie möchten, dass ein Plugin dies tut.
Das normale Verfahren zum Erstellen verschiedener Seitenvorlagen lautet:
Erstellen Sie eine neue Seitenvorlage in Ihrem ACTIVE-Themenverzeichnis (erstellen Sie eine Kopie von page.php).
Ändern Sie den Namen der Vorlage (innerhalb der Datei).
/ * Vorlagenname: Seite mit voller Breite * /
Ändern Sie den Code der Seite in das, was Sie erreichen möchten.
Sie können jetzt eine neue Seite erstellen und auswählen, welche "Vorlage" verwendet werden soll.
...
Ich hoffe, das ist es, was Sie erreichen wollen?
Offizielle Dokumentation hier: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates
Dies scheint ziemlich schwer zu erreichen zu sein. get_page_templates()
function verwirft aktiv alles, was sich nicht in übergeordneten und untergeordneten Stammverzeichnissen befindet. Es wird auch nicht in globalen Variablen gespeichert oder ermöglicht das Filtern der generierten Liste von Vorlagen.
Ich denke, dass die Meta-Box für Seitenattribute gegabelt und vollständig ersetzt werden muss. Und nicht sicher, ob es auch dann möglich sein wird.
Ich bin damit einverstanden, dass dies sinnvoll erscheint, aber WordPress-Code ist sehr präzise, da benannte Vorlagen nur aus dem Verzeichnis des Themas stammen sollen.
Ist dies nicht einer der Gründe, register_theme_directory()
die eingeführt wurden?
http://core.trac.wordpress.org/ticket/10467
Zu der Zeit war es ein Problem im Zusammenhang mit BuddyPress, das hier und da zusätzliche Vorlagen einwerfen wollte.
Ich gehe davon aus, dass sie nicht richtig als Seitenvorlagen aufgeführt sind: