2012-11-26 30 views
5

Có cách nào để ẩn tệp mẫu trong quản trị viên không?Làm thế nào để ẩn một mẫu trong Wordpress?

Ví dụ: tôi có mẫu sẽ chỉ khả dụng nếu một plugin cụ thể được cài đặt và tôi đã biết cách kiểm tra xem plugin có đang hoạt động không. Nhưng làm cách nào để ẩn mẫu?

Ví dụ tôi muốn ẩn "Blogger Redirection" -template dưới đây:

Image is just an example...

Tôi đã tìm thấy một số liên kết, nhưng tất cả các giải pháp có vẻ phản đối.

EDIT:Nếu bất cứ ai quan tâm đến việc làm thế nào tôi kiểm tra xem pluin đang hoạt động tôi làm điều đó với các chức năng sau đây:

function isPluginActive($plugin){ 
     if (in_array($plugin, apply_filters('active_plugins', get_option('active_plugins')))) 
     { 
      return true; 
     } 
     return false; 
    } 
+0

Bạn có muốn quản trị viên không thấy mẫu được liệt kê nếu không có plugin chính xác không? – MrGlass

+0

@MrGlass YES! Chính xác. Nếu plugin chưa được cài đặt và mẫu đó yêu cầu nó. Giả sử nếu tôi có một mẫu sử dụng plugin Advanced Custom Fields và nó không được cài đặt thì tệp mẫu đó không phải là một tùy chọn. – jamietelin

+0

Tôi không nghĩ rằng có thể. Bạn sẽ cần phải có wordpress chạy mã của bạn (để ẩn các mẫu) mà không có mã của bạn đang được lựa chọn (kể từ khi khái niệm ở đây là họ không thể sử dụng các mẫu). – MrGlass

Trả lời

12

Update - một lời cảnh cáo như đã chỉ ra bởi andrew trong các ý kiến ​​dưới đây:

Sử dụng mã này một cách thận trọng, Nếu bạn có bất kỳ trang sử dụng mẫu mà bạn loại bỏ khỏi lựa chọn, cập nhật trang sẽ gây ra nó để trở lại mẫu mặc định


tôi không chắc chắn nếu có một cách PHP để làm điều này - bạn sẽ phải tìm trong các lớp WP_Theme, nhưng từ tôi đầu tiên nhìn nó có thể không thể được bởi vì để có được tất cả các mẫu, lớp sử dụng một hàm nội bộ được gọi là scandir() để quét thư mục chủ đề hiện tại và nhận tất cả các tệp .php từ đó. Sau đó, nó sẽ tìm kiếm số nhận dạng tương ứng Template Name: và nếu nó hiện diện nó sẽ được thêm vào danh sách mẫu.

Vì vậy, thay vào đó tôi khuyên bạn nên thêm một chút JS sẽ xóa tùy chọn này khỏi chọn mẫu trang. Dưới đây là đoạn mã:

function my_remove_page_template() { 
    global $pagenow; 
    if (in_array($pagenow, array('post-new.php', 'post.php')) && get_post_type() == 'page') { ?> 
     <script type="text/javascript"> 
      (function($){ 
       $(document).ready(function(){ 
        $('#page_template option[value="sidebar-page.php"]').remove(); 
       }) 
      })(jQuery) 
     </script> 
    <?php 
    } 
} 
add_action('admin_footer', 'my_remove_page_template', 10); 

Điều này sẽ xóa mẫu sidebar-page.php khỏi menu thả xuống. Các điều kiện là để kịch bản chỉ được thêm vào thêm và chỉnh sửa màn hình của các trang.

Điều chỉnh cho trường hợp của bạn và tận hưởng :)

+2

+1 để đảm bảo rằng tập lệnh chỉ được thêm và chỉnh sửa màn hình. – Sudar

+2

+1 để giải thích cách WP kiểm tra các tệp mẫu. – jamietelin

+2

Sử dụng mã này một cách thận trọng, Nếu bạn có bất kỳ trang nào sử dụng mẫu mà bạn đã xóa khỏi lựa chọn, việc cập nhật trang sẽ khiến nó trở lại mẫu mặc định – andrew

4

WordPress không cung cấp bất kỳ móc, vì vậy bạn không thể xóa nó khỏi PHP.

Một giải pháp thay thế mà tôi có thể nghĩ là bạn có thể xóa nó theo cách động bằng JavaScript. Bao gồm một đoạn mã JavaScript trong trang add post sẽ xóa tùy chọn khỏi phần tử select.

Tôi biết đây không phải là giải pháp sạch, nhưng tôi nghĩ đây là cách duy nhất có thể thực hiện từ bây giờ.

Sửa:

lựa chọn khác là để sao chép các tập tin mẫu vào thư mục theme khi Plugin được kích hoạt và loại bỏ các tập tin mẫu khi Plugin ngừng hoạt động.

Điều này giả định rằng mẫu chỉ được Plugin này sử dụng.

+0

Tôi đồng ý, hiện tại đây có thể là tùy chọn duy nhất. – bodi0

+0

Tôi hiểu. Tôi sợ rằng đây là trường hợp. Đoán một js hack sẽ phải làm công việc. ;) – jamietelin

+1

Bạn cũng có thể thử tùy chọn thứ hai mà tôi đã đăng trong câu trả lời của mình. – Sudar

Các vấn đề liên quan