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 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?
Câu trả lời:
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.
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à:
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).
Thay đổi tên của mẫu (bên trong tệp).
/ * Tên mẫu: Trang toàn chiều rộng * /
Thay đổi mã của trang thành những gì bạn đang cố gắng để đạt được.
Bây giờ bạn có thể đi tạo một trang mới và chọn "Mẫu" để sử dụng.
...
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ề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.
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: