it-swarm-vi.tech

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

Tôi muốn tạo 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 Mẫu liên hệ 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, vì một 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?

9
Tal Galili

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(), 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 của wpcf7_enqueue_scriptswpcf7_enqueue_styles để thêm chúng vào các móc wp_print_scriptswp_print_styles.

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 nhưng trang liên hệ của bạn. Hành động wp_head kích hoạt trước tập lệnh và kiểu hành động, vì vậy bạn sẽ cần thêm một cái gì đó như thế này vào tệp tin.php của chủ đề:

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ả về true khi 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, điều kiện if() sẽ thêm chức năng xóa tập lệnh/kiểu vào hành động wp_head, sẽ kích hoạt ngay trước các hành động wp_print_scriptswp_print_styles.

Đ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.

9
EAMann