ไม่สามารถเข้าคิวสคริปต์ในส่วนท้ายได้หรือไม่


10

WordPress codex พูดว่า :

( หน้า codex เก่า )

$ in_footer

(บูลีน) (เป็นทางเลือก) โดยปกติสคริปต์จะอยู่ในส่วน หากพารามิเตอร์นี้เป็นจริงสคริปต์จะอยู่ที่ด้านล่างของ สิ่งนี้ต้องใช้ชุดรูปแบบเพื่อให้มีตะขอ wp_footer () ในสถานที่ที่เหมาะสม โปรดทราบว่าคุณต้องจัดคิวสคริปต์ของคุณก่อนที่จะรัน wp_head แม้ว่าจะถูกวางไว้ในส่วนท้าย (ใหม่ใน WordPress 2.8) ค่าเริ่มต้น: false

ดังนั้นฉันจึงเพิ่มtrueหลังจากสคริปต์ของแต่ละ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');

แต่สคริปต์ยังคงรวมอยู่ในส่วนหัว

ข้อเสนอแนะใด ๆ ที่จะแก้ไขได้อย่างไร

คำตอบ:


18

คุณใส่รหัสไว้ที่ไหน

  1. อาร์กิวเมนต์ "จริง" จะเข้าสู่wp_register_script();ไม่ใช่wp_enqueue_script() ;

ฟังก์ชั่นคือ:

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

ความหมาย

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

เช่น

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

  1. ชุดรูปแบบของคุณมี<?php wp_footer(); ?> ที่ส่วนท้ายของหน้า?

3. เพิ่มการดำเนินการด้วย add_action('wp_print_scripts', 'your function');

ที่ถูกกล่าวว่าวิธีปฏิบัติที่ดีที่สุดของคุณคือ:

<?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');  
?>  

หรือ add_action('wp_print_scripts', 'dl_register_js');


ขอบคุณมันใช้งานได้ในขณะนี้ แต่ฉันก็ตระหนักว่าการวางtrueในwp_enqueueหรือwp-register_scriptทำงานได้ดี
janoChen

4
@ krembo99 การwp_register_script()ใช้จำนวนอาร์กิวเมนต์ที่เท่ากันและทั้งสองเพิ่มไปยัง$wp_scriptsอาร์เรย์ทั่วโลกและdatasubarray รวมข้อมูลที่ไม่ถูกต้องกับความสามารถในการอ่านของคำตอบของคุณฉันจะให้ -1 (จะถูกลบออกในการทำใหม่)
ไกเซอร์

1
สำหรับฉันชิ้นส่วนปริศนาที่ขาดหายไป<?php wp_footer(); ?>นั้นไม่มีอยู่ในเทมเพลตหน้า หลังจากนั้นtrueพารามิเตอร์ในwp_enqueue_scriptทำงานของมัน
joehanna

6

คุณกำลังส่งค่าบูลไปยังพารามิเตอร์การพึ่งพา ลองสิ่งนี้:

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

2
นี่คือเทคนิคคำตอบที่ถูกต้องสำหรับคำถามของเขาตามรหัสในคำถาม
AndyWarren

4

ฉันมีปัญหาเดียวกันและหลังจากทำการค้นหาบางอย่างฉันขาดฟังก์ชั่นนี้ในธีมที่กำหนดเอง:

 <?php wp_footer();?>

3

ฉันต้องการลดความซับซ้อนของคำตอบที่นี่ .. เมื่อใช้ wp_enqueue_script หรือ wp_register_script เพื่อโหลดสคริปต์ในส่วนท้ายคุณต้องตรวจสอบให้แน่ใจว่าคุณรวม params อื่นด้วยแม้ว่าจะว่างเปล่า

ฉันกำลังพยายาม ..

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

ซึ่งไม่ทำงานอย่างที่ @janoChen สังเกตเห็น Wordpress เรียกร้องให้

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

ดังนั้นคุณต้องรวม'',สำหรับพารามิเตอร์ที่คุณไม่ได้ใช้ถ้าคุณต้องการประกาศฟังก์ชั่นแบบอินไลน์ ดังนั้นรหัสด้านล่างทำงานตามแผนที่วางไว้

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

หลังจากนั้นคุณสามารถประกาศฟังก์ชันในอาร์เรย์เช่นรูปแบบเช่น @Brian Fegter ได้


คุณต้องจัดเตรียมสตริงว่างเปล่าเฉพาะที่ต้องการตัวยึดตำแหน่ง
s_ha_dum

อ่าใช่! แน่นอนเฉพาะใน'',กรณีที่จำเป็นต้องมีพารามิเตอร์ไม่ใช่ตัวเลือก
Andrew-ThinkUp

2

หากคุณจัดคิวสคริปต์ไว้ที่ส่วนหัว แต่ประกาศการพึ่งพาสคริปต์ที่เข้าสู่ส่วนท้าย WordPress จะย้ายสคริปต์ส่วนท้ายไปยังส่วนหัวเพื่อให้พร้อมใช้งานกับสคริปต์ที่ขึ้นต่อกัน


1

เอกสาร WordPress อย่างเป็นทางการ (ตรวจสอบล่าสุด - พฤษภาคม 2018):

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

และประสบการณ์ส่วนตัวมากกว่า 7 ปี

  1. คุณควรลองใช้ฟังก์ชั่น ' wp_enqueue_scripts ' เสมอเพื่อให้เข้ากันได้ดีขึ้นกับปลั๊กอิน / ธีมที่ติดตั้ง

     add_action('wp_enqueue_scripts','your_plugin_enqueue');
  2. คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานเอกสารอย่างเป็นทางการได้ที่นี่

       /**** 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');
    

ป.ล. หากคุณพบว่าคำตอบนี้มีประโยชน์โปรดให้คำว่า '▲' ( ArrowUP ) ถ้าคุณคิดว่ามันสามารถปรับปรุงได้โปรดแสดงความคิดเห็นด้านล่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.