มีปลั๊กอิน WordPress ที่ลงทะเบียนไฟล์ปลั๊กอินเป็นเทมเพลตหน้ากำหนดเองหรือไม่?


9

ฉันต้องสร้างปลั๊กอินที่ทำให้เทมเพลตหน้าแบบกำหนดเองมีอยู่ใน wp-admin ฉันสงสัยว่ามีบางคนจัดการปัญหานี้ไปแล้วดูเหมือนว่าจะเป็นกระบวนการที่ค่อนข้างธรรมดาใช่ไหม


ฉันไม่ค่อยเข้าใจคำถาม คุณต้องการปลั๊กอินที่แทรกแม่แบบกำหนดเองที่กำหนดไว้ในปลั๊กอินหรือไม่?
Steven

คำตอบ:


7

เช่นเดียวกับคำตอบที่ Rarst คุณสามารถทำได้โดยไม่ต้องแก้ไขไฟล์หลักหรือลบคุณสมบัติของหน้า metabox ออกและสร้างของคุณโดยใช้รหัสเดียวกันพร้อมการดัดแปลงเล็กน้อย รหัสด้านล่างคือรหัสสำหรับ /admin/include/meta-boxes.php และฉันได้เพิ่มความคิดเห็นเพื่อแสดงว่าตัวเลือกเทมเพลตหน้าพิเศษของคุณจะไปที่ใด:

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
}

ไม่ทราบว่านี่คือการแก้ไขในกรณีของคุณ แต่ฉันมีกรณี smiler เมื่อฉันต้องการที่จะแสดงประเภทโพสต์ในรูปแบบปลั๊กอินในตัวและสำหรับที่ฉันใช้add_filter('the_content', 'my-function'); และฟังก์ชั่นของฉันสร้างการส่งออกไปแสดง

อีกตัวเลือกหนึ่งคือให้ปลั๊กอินของคุณสร้างไฟล์เทมเพลตในไดเรกทอรีธีมปัจจุบันดังนี้:

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);
 }

และคุณสามารถเรียกใช้สิ่งนี้ได้หลังจากตรวจสอบครั้งแรกว่ามีไฟล์อยู่หรือไม่

if(!file_exists( $file_name)){create_plugins_theme_file();}

หวังว่าสิ่งนี้จะช่วยได้


จะทดสอบสิ่งต่างๆในกล่องเมตาบัสตามคำตอบของฉัน - เป็นเพียงส่วนหนึ่งของปัญหาอื่น ๆ คือ - รหัสที่พยายามโหลดเทมเพลตเฉพาะเมื่ออยู่ในไดเรกทอรีธีม ดังนั้นการให้ไฟล์เทมเพลต "ภายนอก" อาจไม่เพียงพอที่จะโหลด
Rarst

นั่นเป็นเหตุผลที่ฉันแนะนำให้ปลั๊กอินสร้างไฟล์ในไดเรกทอรีของธีม
Bainternet

2

ฉันไม่แน่ใจทั้งหมดฉันเข้าใจสิ่งที่คุณพยายามที่จะบรรลุอย่างน้อยทำไมคุณต้องการให้ปลั๊กอินทำ

ขั้นตอนปกติสำหรับการสร้างเทมเพลตหน้าต่างๆคือ:

  1. สร้างเทมเพลตใหม่ในไดเรกทอรีธีม ACTIVE ของคุณ (ทำสำเนา page.php)

  2. เปลี่ยนชื่อของเทมเพลต (ด้านในไฟล์)

    / * ชื่อเทมเพลต: หน้าเต็มความกว้าง * /

  3. เปลี่ยนรหัสของหน้าเว็บเป็นสิ่งที่คุณพยายามทำ

  4. ตอนนี้คุณสามารถไปสร้างหน้าใหม่และเลือก "เทมเพลต" ที่จะใช้

ข้อความแสดงแทน

...

ฉันหวังว่าคุณจะพยายามทำให้สำเร็จ

เอกสารอย่างเป็นทางการที่นี่: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates


woops โค้ด PHP ตัวอย่างค่อนข้างสับสน เยี่ยมชมลิงค์เพื่อดูตัวอย่างรหัสที่ถูกต้อง
Lars Koudal

2
สนใจที่จะรู้ว่าใครใช้วิธีของ Jan ในปลั๊กอินที่มีอยู่หรือไม่: wordpress.stackexchange.com/questions/3396/…
jnthnclrk

ฉันเชื่อว่า @trnsfrmr กำลังมองหาวิธีสร้างเทมเพลตหน้าที่กำหนดไว้ล่วงหน้า (ขั้นตอนที่ 1-3) ภายในปลั๊กอินของเขาเพื่อให้แม่แบบนี้พร้อมใช้งานสำหรับผู้ใช้หลังจากการเปิดใช้งานปลั๊กอิน ฉันคิดว่าเขาต้องการให้ชุดรูปแบบการแก้ปัญหานี้เป็นอิสระ
Michal Mau

อ่าโอเคฉันเข้าใจผิดเล็กน้อยขอบคุณสำหรับการชี้แจง :-)
Lars Koudal

2

ดูเหมือนว่าจะทำได้ยาก get_page_templates()ฟังก์ชั่นทิ้งสิ่งที่ไม่ได้อยู่ในไดเรกทอรีรากหลักและลูกอย่างแข็งขัน มันไม่ได้เก็บไว้ในตัวแปรส่วนกลางหรืออนุญาตให้กรองรายการแม่แบบที่สร้างขึ้น

ฉันคิดว่ากล่องเมตาของแอททริบิวหน้าจะต้องถูกแยกออกและแทนที่อย่างสมบูรณ์สำหรับสิ่งนี้ และไม่แน่ใจว่ามันจะเป็นไปได้แม้ในขณะนั้น

ฉันยอมรับว่าสิ่งนี้ดูเหมือนจะเป็นเรื่องที่สมเหตุสมผล แต่ WordPress code นั้นแม่นยำมากเพราะต้องการให้แม่แบบชื่อนั้นมาจากไดเรกทอรีของธีมเท่านั้น


1

ไม่ได้ทำหนึ่งในเหตุผลที่register_theme_directory()ได้รับการแนะนำนี้หรือไม่?

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

ในช่วงเวลานั้นเป็นปัญหาที่เกี่ยวข้องกับ BuddyPress ซึ่งต้องการที่จะโยนในแม่แบบพิเศษที่นี่และที่นั่น

ฉันคิดว่ามันไม่ได้อยู่ในรายการอย่างถูกต้องเป็นเทมเพลตหน้า แต่:

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


ฉันจะดูรหัส (อาจเป็นวันพรุ่งนี้) แต่เท่าที่ฉันจำแม่แบบที่มีชื่อจะค้นหาอย่างชัดเจนผ่านค่าคงที่ของเส้นทางเท่านั้น
Rarst
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.