Saya perlu membuat plugin yang membuat templat halaman khusus tersedia di wp-admin. Saya bertanya-tanya apakah seseorang sudah menangani ini, karena sepertinya proses yang cukup khas?
Saya perlu membuat plugin yang membuat templat halaman khusus tersedia di wp-admin. Saya bertanya-tanya apakah seseorang sudah menangani ini, karena sepertinya proses yang cukup khas?
Jawaban:
Seperti dijawab Rarst Anda benar-benar dapat melakukannya tanpa mengedit file inti atau menghapus metabox atribut halaman dan membuat Anda menggunakan kode yang sama dengan sedikit modifikasi. kode di bawah ini adalah kode untuk /admin/include/meta-boxes.php dan saya menambahkan komentar untuk menunjukkan ke mana pilihan templat halaman ekstra Anda akan pergi:
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
}
Tidak tahu apakah ini adalah perbaikan dalam kasus Anda, tetapi saya memiliki kasus smiler ketika saya perlu menampilkan jenis posting dalam tema bawaan plugin dan untuk itu saya menggunakan add_filter('the_content', 'my-function');
dan fungsi saya membuat output untuk ditampilkan.
Opsi lain adalah membuat plugin Anda membuat file template di direktori tema saat ini, sesuatu seperti ini:
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);
}
dan Anda dapat menjalankan ini setelah Anda memeriksa apakah file tersebut ada
if(!file_exists( $file_name)){create_plugins_theme_file();}
Semoga salah satu dari ini membantu.
Saya tidak sepenuhnya yakin saya mengerti apa yang ingin Anda capai, setidaknya mengapa Anda ingin plugin melakukan itu.
Prosedur normal untuk membuat templat halaman yang berbeda adalah:
Buat templat-halaman baru di direktori tema AKTIF Anda (buat salinan page.php).
Ubah nama templat (di dalam file).
/ * Nama Templat: Halaman Lebar Penuh * /
Ubah kode halaman menjadi apa yang ingin Anda capai.
Sekarang Anda dapat membuat halaman baru dan memilih "Templat" mana yang akan digunakan.
...
Saya harap itu yang ingin Anda capai?
Dokumentasi resmi di sini: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates
Ini sepertinya cukup sulit untuk dicapai. get_page_templates()
fungsi secara aktif membuang apa pun yang tidak terletak di direktori root induk dan anak. Itu juga tidak menyimpan dalam variabel global atau memungkinkan untuk menyaring daftar templat yang dihasilkan.
Saya pikir meta box atribut halaman perlu bercabang dan sepenuhnya diganti untuk ini. Dan tidak yakin itu akan mungkin bahkan saat itu.
Saya setuju bahwa ini sepertinya sesuatu yang masuk akal, tetapi kode WordPress sangat tepat karena ia menginginkan template bernama hanya berasal dari direktori theme.
Bukankah melakukan ini salah satu alasan yang register_theme_directory()
diperkenalkan?
http://core.trac.wordpress.org/ticket/10467
Pada saat itu ada masalah yang berkaitan dengan BuddyPress, yang ingin melemparkan template tambahan di sana-sini.
Saya kira mereka tidak terdaftar dengan benar sebagai templat halaman, meskipun: