Tidak dapat membuat skrip di footer enqueue?


10

Kodeks WordPress mengatakan :

( halaman codex lama )

$ in_footer

(boolean) (opsional) Biasanya skrip ditempatkan di bagian ini. Jika parameter ini benar, skrip ditempatkan di bagian bawah. Ini membutuhkan tema untuk memiliki kait wp_footer () di tempat yang sesuai. Perhatikan bahwa Anda harus membuat skrip Anda sebelum wp_head dijalankan, bahkan jika itu akan ditempatkan di footer. (Baru di WordPress 2.8) Default: false

Jadi saya menambahkan truesetelah setiap skrip 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');

Tetapi skrip masih dimasukkan dalam header.

Ada saran untuk memperbaikinya?

Jawaban:


18

Di mana Anda meletakkan kode Anda?

  1. argumen "benar" berlaku di wp_register_script();, bukanwp_enqueue_script() ;

fungsinya adalah:

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

berarti

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

MISALNYA

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

  1. apakah tema Anda ada <?php wp_footer(); ?> di akhir halaman?

3. tambahkan tindakan dengan add_action('wp_print_scripts', 'your function');

Yang sedang berkata, praktik terbaik Anda adalah:

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

atau add_action('wp_print_scripts', 'dl_register_js');


Terima kasih itu berfungsi sekarang tetapi saya menyadari bahwa menempatkan truedi salah satu wp_enqueueatau wp-register_scriptberfungsi dengan baik.
janoChen

4
@ krembo99 The wp_register_script()mengambil jumlah argumen yang sama dan keduanya menambah $wp_scriptsarray global dan datasubarray. Menggabungkan informasi yang salah dengan keterbacaan yang luar biasa dari jawaban Anda, saya akan memberi Anda -1 (akan dihapus pada pengerjaan ulang).
kaiser

1
Bagi saya, potongan puzzle yang hilang itu <?php wp_footer(); ?>tidak ada di templat halaman. Setelah itu, trueparameter dalam wp_enqueue_scriptmelakukan tugasnya.
joehanna

6

Anda memberikan nilai bool ke param dependensi. Coba ini:

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

2
Ini secara teknis jawaban yang tepat untuk pertanyaannya berdasarkan kode dalam pertanyaan.
AndyWarren

4

Saya memiliki masalah yang sama dan setelah melakukan beberapa pencarian saya kehilangan fungsi ini dalam tema khusus saya:

 <?php wp_footer();?>

3

Saya ingin menyederhanakan jawabannya di sini .. Saat menggunakan wp_enqueue_script atau wp_register_script untuk memuat skrip di footer, Anda perlu memastikan Anda menyertakan params yang lain juga, walaupun kosong.

Saya sedang berusaha ..

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

Yang tidak berhasil seperti @janoChen perhatikan. Panggilan Wordpress untuk

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

Jadi, Anda perlu memasukkan '',untuk parameter yang tidak Anda gunakan jika Anda ingin mendeklarasikan fungsi inline. Karenanya kode di bawah ini berfungsi sesuai rencana.

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

Selanjutnya Anda dapat mendeklarasikan fungsi dalam array seperti format seperti @Brian Fegter shows.


Anda perlu memberikan string kosong hanya di mana placeholder diperlukan.
s_ha_dum

Ah iya! Tentu saja, hanya '',jika parameter diperlukan, bukan opsional.
Andrew-ThinkUp

2

Jika Anda mengirim skrip ke header tetapi menyatakan ketergantungan pada skrip yang dibagikan ke footer, WordPress akan memindahkan skrip footer ke header untuk membuatnya tersedia untuk skrip dependen.


1

Menurut dokumentasi WordPress resmi (Terakhir Diperiksa - Mei 2018):

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

dan pengalaman pribadi 7+ tahun.

  1. Anda harus mencoba selalu menggunakan fungsi ' wp_enqueue_scripts ' untuk kompatibilitas yang lebih baik dengan plugin / tema yang diinstal.

     add_action('wp_enqueue_scripts','your_plugin_enqueue');
  2. Anda dapat menemukan lebih banyak tentang penggunaan dokumen resmi. Penggunaan di sini

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

NB. Jika Anda menemukan jawaban ini berguna, tolong beri '▲' ( ArrowUP ), jika menurut Anda itu dapat ditingkatkan, silakan komentar di bawah ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.