Hạn chế một Plugin chỉ tải CSS và JS của nó trên các trang được chọn?


9

Tôi muốn gây ra một plugin để hạn chế tải các tệp định kiểu CSS và tệp JavaScript JavaScript của mình sang các trang mà chúng cần.

Một ví dụ cho câu hỏi của tôi là plugin Liên hệ với Mẫu 7 mà tôi đã sử dụng để tạo một biểu mẫu trong một trang trên trang web của mình (trang " liên hệ với tôi "). Tuy nhiên, nó thêm các dòng sau vào MỌI trang / bài đăng trên trang web:

<link rel='stylesheet' id='contact-form-7-css'  href='http://www.r-statistics.com/wp-content/plugins/contact-form-7/styles.css?ver=2.3.1' type='text/css' media='all' /> 

<script type='text/javascript' src='http://www.r-statistics.com/wp-content/plugins/contact-form-7/scripts.js?ver=2.3.1'></script> 

Điều này khiến tôi nghi ngờ rằng plugin này đang làm giảm thời gian tải trang web của tôi, đối với tiện ích mở rộng khiến tôi quan tâm chỉ trên một trang trên trang web.

Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể xóa các dòng bổ sung này khỏi tất cả các trang ngoại trừ trang "Liên hệ với tôi" nhưng không tắt plugin?

Câu trả lời:


9

Kiểu và tập lệnh luôn được thiết lập bởi các hàm wp_enqueue_script()wp_enqueue_style(), chúng phải được gắn với một móc hành động cụ thể để hoạt động. Tôi đã xem qua Biểu mẫu liên hệ 7 và có vẻ như nó đang sử dụng các thẻ hành động wpcf7_enqueue_scriptswpcf7_enqueue_stylesđể thêm chúng vào wp_print_scriptswp_print_stylesmóc.

Vì vậy, những gì bạn cần làm là bỏ nối các tập lệnh và kiểu từ mọi trang trừ trang liên hệ của bạn. Các wp_headvụ cháy hành động trước những hành động kịch bản và phong cách, vì vậy bạn sẽ cần phải thêm một cái gì đó như thế này để tập tin functions.php của theme của bạn:

function remove_wpcf7_extras() {
    remove_action('wp_print_scripts', 'wpcf7_enqueue_scripts');
    remove_action('wp_print_styles', 'wpcf7_enqueue_styles');
}

if( ! is_page('contact me') ) {
    add_action('wp_head', 'remove_wpcf7_extras');
}

Hàm is_page () sẽ trở lại truekhi bạn ở trang liên hệ (giả sử tên là "liên hệ với tôi") ... bạn cũng có thể sử dụng sên trang và ID trang cho bộ lọc. Trên tất cả các trang khác, if()điều kiện sẽ thêm chức năng loại bỏ tập lệnh / kiểu vào wp_headhành động, sẽ kích hoạt ngay trước wp_print_scriptswp_print_styleshành động.

Điều này sẽ xóa mã bổ sung khỏi các trang của bạn và bạn sẽ không phải tắt trình cắm hoặc chỉnh sửa bất kỳ tệp cốt lõi nào. Các chức năng và mã tôi đã liệt kê ở trên cũng sẽ không khiến chủ đề của bạn bị hỏng nếu bạn xóa Biểu mẫu liên hệ 7 trong tương lai, vì vậy ... không cần phải lo lắng về khả năng tương thích nâng cấp trong tương lai.


Xin chào EAMann. Giải pháp tuyệt vời - cảm ơn bạn! Bạn có nghĩ rằng phương pháp này có thể được bao bọc trong một plugin để kiểm tra các hook nào được sử dụng và sau đó cho phép ai đó hủy kích hoạt chúng theo vị trí trang không?
Tal Galili

Thật không may, có rất nhiều hook được sử dụng linh hoạt trong WordPress. Vì vậy, bạn không thể phát hiện ra những cái móc đang được sử dụng một cách đáng tin cậy ... nhưng có lẽ bạn có thể bắt được hầu hết chúng theo cách này.
EAMann

Mát mẻ. bạn vừa cho tôi một ý tưởng cho một câu hỏi mới: wordpress.stackexchange.com/questions/698/NH
Tal Galili

Để bạn biết, bạn cũng đã cho tôi ý tưởng để bắt đầu phát triển trình cắm này :-)
EAMann

3
@EAMann và @Tal Galili - Trên thực tế, bạn có thể chụp tất cả các hook, ngay cả các hook động bằng allhook, xem wordpress.stackexchange.com/questions/307
MikeSchinkel
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.