Không thể enqueue script trong phần chân trang?


10

Codex WordPress nói :

( trang codex cũ )

$ in_footer

(boolean) (tùy chọn) Thông thường các tập lệnh được đặt trong phần. Nếu tham số này là đúng, tập lệnh được đặt ở dưới cùng của. Điều này đòi hỏi chủ đề phải có móc wp_footer () ở vị trí thích hợp. Lưu ý rằng bạn phải ghi lại tập lệnh của mình trước khi wp_head được chạy, ngay cả khi nó sẽ được đặt ở chân trang. (Mới trong WordPress 2.8) Mặc định: sai

Vì vậy, tôi đã thêm truesau mỗi kịch bản src path:

/**
     * JavaScript
     */

    function my_scripts_method() {
        wp_deregister_script( 'jquery' );
        wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js', true );
        wp_enqueue_script( 'jquery' );
    }

    add_action('wp_enqueue_scripts', 'my_scripts_method');

    function media_queries_script() {
        wp_register_script( 'mediaqueries', get_template_directory_uri() . '/js/css3-mediaqueries.js', true );
        wp_enqueue_script( 'mediaqueries' );
    }

    add_action('wp_enqueue_scripts', 'media_queries_script');

    function custom_script() {
        wp_register_script( 'custom', get_template_directory_uri() . '/js/custom.js', true );
        wp_enqueue_script( 'custom' );
    }

    add_action('wp_enqueue_scripts', 'custom_script');

    function replace_script() {
        wp_register_script( 'replace', get_template_directory_uri() . '/js/jquery.ba-replacetext.min.js', true );
        wp_enqueue_script( 'replace' );
    }

    add_action('wp_enqueue_scripts', 'replace_script');

Nhưng các kịch bản vẫn đang được đưa vào tiêu đề.

Bất kỳ đề nghị để khắc phục điều đó?

Câu trả lời:


18

Bạn đã đặt mã của mình ở đâu?

  1. các đối số "đúng" đi vào wp_register_script();, không phảiwp_enqueue_script() ;

các chức năng là:

<?php wp_enqueue_script('handle', 'src', 'deps', 'ver', 'in_footer'); ?>

Ý nghĩa

    <?php wp_enqueue_script('NameMySccript', 'path/to/MyScript', 
'dependencies_MyScript', 'VersionMyScript', 'InfooterTrueorFalse'); ?>

VÍ DỤ

<?php wp_enqueue_script('my_script', WP_CONTENT_URL . 'plugins/my_plugin/my_script.js', array('jquery', 'another_script'), '1.0.0', true); ?>

  1. chủ đề của bạn có <?php wp_footer(); ?> ở cuối trang không?

3. thêm hành động với add_action('wp_print_scripts', 'your function');

Điều đó đang được nói, thực hành tốt nhất của bạn sẽ là:

<?php  
if (function_exists('load_my_scripts')) {  
    function load_my_scripts() {  
        if (!is_admin()) {  
        wp_deregister_script( 'jquery' );  
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js');  
        wp_enqueue_script('jquery');  
        wp_register_script('myscript', bloginfo('template_url').'/js/myScript.js'__FILE__), array('jquery'), '1.0', true );  
        wp_enqueue_script('myscript');  
        }  
    }  
}  
add_action('init', 'load_my_scripts');  
?>  

hoặc là add_action('wp_print_scripts', 'dl_register_js');


Cảm ơn nó đang hoạt động nhưng tôi nhận ra rằng việc đặt một truetrong hai wp_enqueuehoặc wp-register_scripthoạt động tốt.
janoChen

4
@ krembo99 Việc wp_register_script()lấy cùng một lượng đối số và cả hai thêm vào $wp_scriptsmảng toàn cục và phân datađoạn. Kết hợp thông tin sai với khả năng dễ đọc của câu trả lời của bạn, tôi sẽ cung cấp cho bạn -1 (sẽ bị xóa khi làm lại).
kaiser

1
Đối với tôi, mảnh ghép còn thiếu <?php wp_footer(); ?>không tồn tại trong mẫu trang. Sau đó, truetham số trong wp_enqueue_scriptđã làm công việc của nó.
joehanna

6

Bạn đang chuyển một giá trị bool cho tham số phụ thuộc. Thử đi:

 wp_enqueue_script(
      'replace', 
       get_template_directory_uri().'/js/jquery.ba-replacetext.min.js',
       array('jquery'), 
       '', 
       true
);

2
Đây là câu trả lời đúng cho câu hỏi của anh ấy dựa trên mã trong câu hỏi.
AndyWarren

4

Tôi đã có cùng một vấn đề và sau khi thực hiện một số tìm kiếm, tôi đã thiếu chức năng này trong chủ đề tùy chỉnh của mình:

 <?php wp_footer();?>

3

Tôi muốn đơn giản hóa câu trả lời ở đây .. Khi sử dụng wp_enqueue_script hoặc wp_register_script để tải tập lệnh ở chân trang, bạn cần đảm bảo rằng bạn cũng bao gồm các thông số khác, ngay cả khi chúng trống.

Tôi đã cố gắng ..

wp_register_script( 'rrssb', get_stylesheet_directory_uri() . '/includes/rrssb.min.js',  true);

Mà đã không làm việc như @janoChen đã nhận thấy. Wordpress gọi cho

wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );

Vì vậy, bạn cần bao gồm '',các tham số bạn không sử dụng nếu bạn muốn khai báo hàm nội tuyến. Do đó mã dưới đây hoạt động theo kế hoạch.

wp_register_script( 'rrssb', get_stylesheet_directory_uri() . '/includes/rrssb.min.js', '', '', true);

Sau đó, bạn có thể khai báo hàm trong một mảng như định dạng như @Brian Fegter hiển thị.


Bạn cần cung cấp các chuỗi trống chỉ khi cần giữ chỗ.
s_ha_dum

À đúng rồi! Tất nhiên, chỉ '',khi tham số được yêu cầu, không phải là tùy chọn.
Andrew-ThinkUp

2

Nếu bạn liệt kê tập lệnh vào tiêu đề nhưng khai báo sự phụ thuộc vào tập lệnh được ghi vào chân trang, WordPress sẽ chuyển tập lệnh chân trang sang tiêu đề để cung cấp cho tập lệnh phụ thuộc.


1

Theo tài liệu chính thức của WordPress (Kiểm tra lần cuối - Tháng 5 năm 2018):

https://developer.wordpress.org/reference/fifts/wp_enqueue_script/

và kinh nghiệm cá nhân của hơn 7 năm.

  1. Bạn nên thử luôn sử dụng chức năng ' wp_enqueue_scripts ' để tương thích tốt hơn với các plugin / chủ đề đã cài đặt.

     add_action('wp_enqueue_scripts','your_plugin_enqueue');
  2. Bạn có thể tìm hiểu thêm về cách sử dụng tài liệu chính thức Sử dụng tại đây

       /**** wp_register_script, wp_enqueue_script, wp_dequeue_script ***
    
             *** Personal recommendation
             *  - I strongly recommend registering all scripts before enqueueing,
             *  again -> for better compatibility with other developers. 
             *  :::: For example, so others could manipulate the position 
             *       of your scripts using the wp_dequeue_*type* method. 
             *       (wp_dequeue_script, wp_dequeue_style,...)
    
             *** Official Docs
             *   $in_footer
             *      - (bool) (Optional) Whether to enqueue the script before </body> instead of in the <head>. Default 'false'.
             *      - Default value: false
             *
             ***/
    
             // examples:
    
      function your_plugin_enqueue(){
    
    
    
             wp_dequeue_script('some_script(s)'); // remove conflicting script
    
             wp_register_script( $handle, $src, $deps, $ver, $in_footer=true ); 
             wp_enqueue_script($handle);
             wp_register_script('some_script(s)', $src, $deps, $ver, $in_footer=true);  // re-enqueue scripts after yours for example to elimination of conflicts
    
             wp_enqueue_script('some_script(s)');
    
      }
    
    
      add_action('wp_enqueue_scripts','your_plugin_enqueue');

PS Nếu bạn thấy câu trả lời này hữu ích, vui lòng cung cấp cho nó '▲' ( ArrowUP ), nếu bạn nghĩ rằng nó có thể được cải thiện, vui lòng bình luận bên dưới.

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.