Có plugin WordPress nào đăng ký tệp plugin dưới dạng mẫu trang tùy chỉnh không?


9

Tôi cần tạo một plugin để tạo các mẫu trang tùy chỉnh có sẵn trong wp-admin. Tôi đang tự hỏi nếu ai đó đã giải quyết điều này rồi, vì nó có vẻ như là một quá trình khá điển hình?


Tôi không hiểu câu hỏi. Bạn muốn một plugin chèn các mẫu tùy chỉnh được xác định trong plugin?
Steven

Câu trả lời:


7

Giống như Rarst đã trả lời, bạn thực sự có thể làm điều đó mà không cần chỉnh sửa các tệp cốt lõi hoặc xóa các thuộc tính trang metabox và tạo của bạn bằng cách sử dụng cùng một mã với một chút sửa đổi. mã dưới đây là mã cho /admin/include/meta-boxes.php và tôi đã thêm một nhận xét để hiển thị các tùy chọn mẫu trang bổ sung của bạn sẽ đi đâu:

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
}

Không biết đây có phải là một sửa chữa trong trường hợp của bạn không nhưng tôi đã có một trường hợp smiler khi tôi cần hiển thị loại bài đăng trong một chủ đề tích hợp plugin và do đó tôi đã sử dụng add_filter('the_content', 'my-function'); và chức năng của tôi đã tạo đầu ra để hiển thị.

Một tùy chọn khác là làm cho plugin của bạn tạo tệp mẫu trong thư mục chủ đề hiện tại, đại loại như thế này:

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

và bạn có thể chạy nó sau khi bạn kiểm tra xem tập tin có tồn tại không

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

Hy vọng một trong những điều này sẽ giúp.


Sẽ kiểm tra công cụ hộp meta, bus theo câu trả lời của tôi - đó chỉ là một phần của vấn đề, khác là - mã cố gắng tải mẫu chỉ khi nó nằm trong thư mục chủ đề. Vì vậy, việc cung cấp tệp mẫu "bên ngoài" có thể không đủ để tải nó.
Rarst

đó là lý do tại sao tôi đề nghị làm cho plugin tạo các tệp trong thư mục của chủ đề.
BaiNET

2

Tôi không hoàn toàn chắc chắn tôi hiểu những gì bạn đang cố gắng đạt được, ít nhất là tại sao bạn lại muốn một plugin để làm điều đó.

Quy trình thông thường để tạo các mẫu trang khác nhau là:

  1. Tạo một mẫu trang mới trong thư mục chủ đề HOẠT ĐỘNG của bạn (tạo một bản sao của page.php).

  2. Thay đổi tên của mẫu (bên trong tệp).

    / * Tên mẫu: Trang toàn chiều rộng * /

  3. Thay đổi mã của trang thành những gì bạn đang cố gắng để đạt được.

  4. Bây giờ bạn có thể đi tạo một trang mới và chọn "Mẫu" để sử dụng.

văn bản thay thế

...

Tôi hy vọng đó là những gì bạn đang cố gắng để đạt được?

Tài liệu chính thức tại đây: http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Temsheet


Ái chà. mã PHP mẫu là một chút sai lầm. Truy cập liên kết cho ví dụ mã thích hợp.
Lars Koudal

2
Quan tâm đến việc biết có ai đang sử dụng phương pháp của Jan trong một plugin hiện có không: wordpress.stackexchange.com/questions/3396/
mẹo

Tôi tin rằng @trnsfrmr đang tìm cách tạo một mẫu trang được xác định trước (bước 1-3) bên trong plugin của mình để cung cấp mẫu này cho người dùng sau khi kích hoạt plugin. Tôi cho rằng anh ấy muốn giữ cho chủ đề giải pháp này độc lập.
Michal Mau

À, được rồi, tôi đã hiểu nhầm một chút ở đó, cảm ơn vì đã làm rõ :-)
Lars Koudal

2

Điều này dường như là khá khó để đạt được. get_page_templates()Chức năng tích cực loại bỏ bất cứ thứ gì không nằm trong thư mục gốc của cha và con. Nó cũng không lưu trữ trong biến toàn cục hoặc cho phép lọc danh sách mẫu được tạo.

Tôi nghĩ hộp meta thuộc tính trang sẽ cần phải được rẽ nhánh và thay thế hoàn toàn cho việc này. Và không chắc chắn nó sẽ có thể ngay cả sau đó.

Tôi đồng ý rằng điều này có vẻ như có ý nghĩa, nhưng mã WordPress rất chính xác ở chỗ nó muốn các mẫu có tên chỉ đến từ thư mục của theme.


1

Không làm điều này một trong những lý do register_theme_directory()đã được giới thiệu?

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

Tại thời điểm đó, đây là một vấn đề liên quan đến BuddyPress, họ muốn đưa vào các mẫu bổ sung ở đây và đó.

Mặc dù vậy, tôi cho rằng chúng không được liệt kê đúng như mẫu trang:

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


Tôi sẽ chuyển qua mã (có thể là vào ngày mai), nhưng theo như tôi nhớ các mẫu có tên được tìm kiếm rõ ràng thông qua các hằng đường dẫn.
Rarst
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.