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?

janoChen
sumber

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

krembo99
sumber
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
);
Brian Fegter
sumber
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();?>
ImFarhad
sumber
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.

Andrew-ThinkUp
sumber
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.

pengguna3765755
sumber
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.

SergeDirect
sumber