Wp_enqueue_script có điều kiện trên một trang


7

Để hiệu quả, chúng tôi đang cố gắng móc một số tập lệnh JS chỉ một mẫu trang nhất định của một chủ đề là giữ một biểu mẫu: page-with-form.php

Trên các hàm chủ đề. Chúng tôi đã định nghĩa init_method như sau:

function my_init_method(){

    $dir = get_bloginfo('stylesheet_directory')."/js/jquery.js";
    wp_deregister_script('jquery');
        wp_register_script('jquery',$dir);
    wp_enqueue_script('jquery');

    $dir = get_bloginfo('stylesheet_directory')."/js/jquery.validate.min.js";
    wp_deregister_script('jquery.validate.min');
        wp_register_script('jquery.validate',$dir);
    wp_enqueue_script('jquery.validate.min');

    $dir = get_bloginfo('stylesheet_directory')."/js/funcion.js";
    wp_deregister_script('funcion');
        wp_register_script('funcion',$dir);
    wp_enqueue_script('funcion');
}    

Sau đó, chúng tôi dự kiến ​​chúng tôi chỉ có thể thêm vào dòng fumps của mẫu trang page-with-form.php (trước get_header ()):

add_action('init', 'my_init_method');
  • Điều này là không thể?
  • Chúng ta có bị buộc phải thêm một quy tắc if vào hàm Hàm.php để phát hiện ra rằng chúng ta đang ở trên trang đó không?

Sửa đổi mã dựa trên câu trả lời: Trên mẫu trang tải chức năng trực tiếp, không cần add_action ("init" ...

my_init_method();
...
get_header();

Để làm rõ, bởi vì tôi tin rằng người trả lời có thể đã bỏ qua điểm này trong câu hỏi của bạn. Bạn đang đề cập đến việc chạy mã trên trên một trang có mẫu trang cụ thể được đính kèm? (đó là cách tôi đọc phần mở đầu câu hỏi của bạn). Trong trường hợp đó, có lẽ sẽ lý tưởng hơn khi sử dụng is_page_template()thay cho is_page()...
t31os

vâng, một trong hai cách sẽ hoạt động nhưng tôi đã tham khảo page_template
luison

Câu trả lời:


7

init sớm hơn nhiều so với tải mẫu trang và không phải là nơi thích hợp cho các cuộc tranh luận (mặc dù có nhiều hướng dẫn và tài liệu sử dụng nó cho việc đó).

Kết nối chức năng của bạn với wp_enqueue_scriptsvà đảm bảo rằng bạn đang thực hiện thao tác đó trước khi wp_head()gọi trong mẫu.


Bây giờ đã hiểu rằng mẫu trang đã quá muộn cho hành động init và ý của bạn là gọi một chức năng được cá nhân hóa. Bây giờ chúng ta chỉ gọi my_init_method () như vậy mà không có hành động init và nó hoạt động. Các lựa chọn thay thế khác để tải có điều kiện nếu trang hoặc page_template cũng hoạt động nhưng chúng tôi chưa kiểm tra chúng.
luison

@luison Chỉ cần chức năng hook trong mẫu sẽ hoạt động, nhưng theo câu trả lời của tôi, cách tốt nhất là hook enqueues để wp_enqueue_scriptshook.
Rarst

Và vấn đề là, bạn có thể gọi is_page_template()bên trong cuộc gọi lại wp_enqueue_scriptsvà nhận giá trị trả về chính xác (đúng / sai), trong đó như init sẽ là quá sớm để gọi is_page_template()hoặc tương tự. Chỉ cần làm rõ là không rõ ràng.
t31os

Tôi sẽ cập nhật wp_enqueue_scriptsmục nhập mã ngày hôm nay, khoảng thời gian những ví dụ xấu đó đã được thay thế (vì nó khuyến khích người dùng đăng ký trên init).
t31os

@ t31os mong chờ nó! Gần đây tôi đang bận tạo các trang bị thiếu để tham khảo chức năng , vì vậy không có giải pháp nào để chỉnh sửa. :)
Rarst

3

Ngoài việc sử dụng hook chính xác (như được chỉ ra bởi @Rarst), bạn sẽ cần di chuyển mã chức năng của mình sang functions.phpvà bọc nội dung hàm trong một if ( is_page( 'page-with-form' ) )điều kiện.


Di chuyển đến functions.phpkhông thực sự cần thiết. Nếu thuận tiện hơn để giữ điều này trong mẫu thì không có vấn đề gì với điều đó.
Rarst

Tôi không đồng ý. vì nhiều lý do, định nghĩa hàm thuộc về functions.php.
Chip Bennett

Tôi chỉ đơn thuần nêu rõ sắc thái kỹ thuật, không cho rằng mọi thứ trong mẫu sẽ là thực tiễn tốt nhất. Cũng theo ban đầu định nghĩa hàm câu hỏi bản thân trong functions.php, họ chỉ muốn chỉ móc trong mẫu (mà chỉ là tốt như đối với tôi).
Rarst

Tôi nên làm rõ: OP nói rằng add_action()cuộc gọi nằm trong tệp mẫu ; đó là một trong những nên được chuyển đến functions.php. Nhưng ngay cả sắc thái kỹ thuật của WRT, mẫu tải ở một điểm khác trong quá trình thực thi từ khi functions.phptải, do đó, việc thêm add_action()các cuộc gọi trong tệp mẫu có thể không hoạt động, từ góc độ kỹ thuật , tùy thuộc vào hook nào được gọi.
Chip Bennett

1
Tôi không đồng ý rằng add_action() phải ở trong functions.php. Mặc dù nó là thông thường (và tốt) nhưng không phải lúc nào cũng có thể / mong muốn / dễ dàng để có tất cả các tập trung. Tôi đã đề cập trong câu trả lời của mình rằng nó nên được đặt trước wp_head()cuộc gọi nếu được giữ trong mẫu.
Rarst

3

Khi bạn tải tệp mẫu của mình, bạn đã vượt qua 'template_redirect'hook, quá muộn (Xem: Tham khảo API / Plugin hành động ).

Bạn cần đặt add_actioncuộc gọi trong tệp tin.php của mình, tệp này được tải trước after_setup_themehook - đây là hook đầu tiên có sẵn cho các chủ đề.

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.