Wp-admin özel sayfa şablonları kullanılabilir kılan bir eklenti oluşturmak gerekiyor. Birisinin bunu zaten ele alıp almadığını merak ediyorum, oldukça tipik bir süreç gibi görünüyor mu?
Wp-admin özel sayfa şablonları kullanılabilir kılan bir eklenti oluşturmak gerekiyor. Birisinin bunu zaten ele alıp almadığını merak ediyorum, oldukça tipik bir süreç gibi görünüyor mu?
Yanıtlar:
Rarst'ın yanıtladığı gibi, bunu temel dosyaları düzenlemeden veya sayfa öznitelikleri meta kutusunu kaldırmadan yapabilir ve biraz değişiklikle aynı kodu kullanarak oluşturabilirsiniz. Aşağıdaki kod /admin/include/meta-boxes.php kodudur ve ek sayfa şablonu seçeneklerinizin nereye gideceğini göstermek için bir yorum ekledim:
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
}
Bu durumda bir düzeltme olup olmadığını bilmiyorum ama ben bir eklenti yerleşik tema yazı türü görüntülemek gerektiğinde ve ben kullanılan add_filter('the_content', 'my-function');
ve benim fonksiyonu görüntülemek için çıktı oluşturduğunda bir smiler durumda vardı .
Başka bir seçenek, eklentinizin geçerli tema dizininde şablon dosyasını oluşturmasını sağlamaktır:
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);
}
ve önce dosyanın var olup olmadığını kontrol ettikten sonra bunu çalıştırabilirsiniz.
if(!file_exists( $file_name)){create_plugins_theme_file();}
Umarım bunlardan biri yardımcı olur.
Neyi başarmaya çalıştığınızı, en azından neden bir eklentinin bunu yapmasını istediğinizi anladığımdan tam olarak emin değilim.
Farklı sayfa şablonları oluşturmak için normal prosedür:
ACTIVE tema dizininizde yeni bir sayfa şablonu oluşturun (page.php dosyasının bir kopyasını oluşturun).
Şablonun adını değiştirin (dosyanın içinde).
/ * Şablon Adı: Tam Genişlik Sayfa * /
Sayfanın kodunu elde etmeye çalıştığınız şekilde değiştirin.
Şimdi yeni bir sayfa oluşturabilir ve hangi "Şablon" un kullanılacağını seçebilirsiniz.
...
Umarım elde etmeye çalıştığınız şey budur?
Burada resmi belgeler: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates
Bunu başarmak oldukça zor görünüyor. get_page_templates()
işlevi, üst ve alt kök dizinlerinde bulunmayan her şeyi etkin bir şekilde atar. Ayrıca global değişkente depolanmaz veya oluşturulan şablonlar listesini filtrelemeye izin vermez.
Sayfa öznitelikleri meta kutusunun çatallanması ve bunun için tamamen değiştirilmesi gerektiğini düşünüyorum. Ve o zaman bile mümkün olacağından emin değilim.
Bunun mantıklı bir şey gibi göründüğünü kabul ediyorum, ancak WordPress kodu, adlandırılmış şablonların sadece temanın dizininden gelmesini istediği için çok hassas.
Bunu ortaya konulan nedenlerden biri değil register_theme_directory()
mi?
http://core.trac.wordpress.org/ticket/10467
O zaman BuddyPress ile ilgili bir sorun vardı, burada ve orada ekstra şablonlara atmak istiyordu.
Gerçi onlar düzgün sayfa şablonları olarak listelenmiyor, ama: