Bir eklenti dosyasını özel sayfa şablonu olarak kaydeden bir WordPress eklentisi var mı?


9

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?


Soruyu tam olarak anlamıyorum. Eklentide tanımlanan özel şablonları ekleyen bir eklenti mi istiyorsunuz?
Steven

Yanıtlar:


7

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.


Meta kutu şeyler, benim cevap göre otobüs test edecek - sadece sorunun bir parçası, diğer - sadece tema dizininde şablon yüklemeye çalışan kodu. Bu nedenle, "harici" şablon dosyasını sağlamak dosyayı yüklemek için yeterli olmayabilir.
Nadir

Bu yüzden eklentinin temanın dizinindeki dosyaları oluşturmasını önerdim.
Bainternet

2

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:

  1. ACTIVE tema dizininizde yeni bir sayfa şablonu oluşturun (page.php dosyasının bir kopyasını oluşturun).

  2. Şablonun adını değiştirin (dosyanın içinde).

    / * Şablon Adı: Tam Genişlik Sayfa * /

  3. Sayfanın kodunu elde etmeye çalıştığınız şekilde değiştirin.

  4. Şimdi yeni bir sayfa oluşturabilir ve hangi "Şablon" un kullanılacağını seçebilirsiniz.

alternatif metin

...

Umarım elde etmeye çalıştığınız şey budur?

Burada resmi belgeler: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates


Woops. örnek PHP kodu biraz karışık. Doğru kod örneği için bağlantıyı ziyaret edin.
Lars Koudal

2
Herkesin Jan'ın yöntemini mevcut bir eklentide kullanıp kullanmadığını bilmekle ilgileniyorum: wordpress.stackexchange.com/questions/3396/…
jnthnclrk

@Trnsfrmr, eklentinin etkinleştirilmesinden sonra bu şablonu kullanıcılar için kullanılabilir hale getirmek için kendi eklentisi içinde önceden tanımlanmış bir sayfa şablonu (1-3 arası adımlar) oluşturmanın bir yolunu aradığına inanıyorum. Sanırım bu çözüm temasını bağımsız tutmak istiyor.
Michal Mau

Ah, tamam, biraz yanlış anladım, açıklama için teşekkürler :-)
Lars Koudal

2

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.


1

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:

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


Ben kod (muhtemelen yarın) üzerinden gidecek, ama hatırladığım kadarıyla isimleri olan şablonlar sadece yol sabitleri aracılığıyla aranır.
Nadir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.