Nie można kolejkować skryptów w stopce?

10

Kodeks WordPress mówi :

( stara strona kodeksu )

$ in_footer

(boolean) (opcjonalnie) Zwykle skrypty są umieszczane w sekcji. Jeśli ten parametr jest prawdziwy, skrypt jest umieszczany na dole. Wymaga to, aby motyw miał hak wp_footer () w odpowiednim miejscu. Pamiętaj, że musisz skasować skrypt przed uruchomieniem wp_head, nawet jeśli zostanie on umieszczony w stopce. (Nowość w WordPress 2.8) Domyślnie: false

Dodałem więc truepo każdym skrypcie 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');

Ale skrypty są nadal zawarte w nagłówku.

Wszelkie sugestie, aby to naprawić?

janoChen
źródło

Odpowiedzi:

18

Gdzie umieściłeś swój kod?

  1. „prawdziwe” argumenty dotyczą wp_register_script();, a niewp_enqueue_script() ;

funkcje to:

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

znaczenie

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

NA PRZYKŁAD

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

  1. czy Twój motyw ma <?php wp_footer(); ?> na końcu strony?

3. dodaj akcję za pomocą add_action('wp_print_scripts', 'your function');

Biorąc to pod uwagę, najlepszą praktyką byłoby:

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

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

krembo99
źródło
Dzięki, że teraz działa, ale zdałem sobie sprawę, że umieszczenie truew jednym z nich wp_enqueuelub wp-register_scriptdziała dobrze.
janoChen
4
@ krembo99 wp_register_script()Pobiera tyle samo argumentów i dodaje do $wp_scriptsglobalnej tablicy i datapodtablicy. W połączeniu z niewłaściwymi informacjami i okropną czytelnością twojej odpowiedzi, muszę dać ci -1 (zostaną usunięte przy przeróbce).
kaiser
1
Dla mnie brakujący element układanki <?php wp_footer(); ?>nie istniał w szablonie strony. Następnie trueparametr w wp_enqueue_scriptwykonał swoją pracę.
JoeHanna
6

Przekazujesz wartość bool do parametru zależności. Spróbuj tego:

 wp_enqueue_script(
      'replace', 
       get_template_directory_uri().'/js/jquery.ba-replacetext.min.js',
       array('jquery'), 
       '', 
       true
);
Brian Fegter
źródło
2
Jest to technicznie właściwa odpowiedź na jego pytanie oparte na kodzie w pytaniu.
AndyWarren
4

Miałem ten sam problem i po przeprowadzeniu wyszukiwania brakowało mi tej funkcji w niestandardowym motywie:

 <?php wp_footer();?>
ImFarhad
źródło
3

Chciałbym tutaj uprościć odpowiedź. Gdy używasz wp_enqueue_script lub wp_register_script do załadowania skryptu w stopce, musisz upewnić się, że podałeś także inne parametry, nawet jeśli są puste.

Próbowałem..

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

Co nie działało, jak zauważył @janoChen. Wordpress wzywa

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

Musisz więc uwzględnić '',parametry, których nie używasz, jeśli chcesz zadeklarować funkcję wbudowaną. Dlatego poniższy kod działa zgodnie z planem.

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

Następnie możesz zadeklarować funkcję w formacie tablicowym, takim jak pokazuje @Brian Fegter.

Andrew-ThinkUp
źródło
Musisz podać puste ciągi tylko tam, gdzie potrzebne są symbole zastępcze.
s_ha_dum
O tak! Oczywiście tylko '',tam , gdzie wymagane są parametry, a nie opcjonalne.
Andrew-ThinkUp
2

Jeśli umieścisz skrypt w nagłówku, ale zadeklarujesz zależność od skryptu umieszczonego w kolejce w stopce, WordPress przeniesie skrypt stopki do nagłówka, aby udostępnić go zależnemu skryptowi.

użytkownik3765755
źródło
1

Zgodnie z oficjalną dokumentacją WordPress (Ostatnia kontrola - maj 2018):

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

i osobiste doświadczenie z 7+ lat.

  1. Powinieneś zawsze próbować używać funkcji „ wp_enqueue_scripts ” dla lepszej kompatybilności z zainstalowanymi wtyczkami / motywami.

     add_action('wp_enqueue_scripts','your_plugin_enqueue');
  2. Więcej informacji na temat korzystania z oficjalnych dokumentów można znaleźć tutaj

       /**** 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 Jeśli uznasz tę odpowiedź za przydatną, proszę dać jej „▲” ( ArrowUP ), jeśli uważasz, że można ją poprawić, prosimy o komentarz poniżej.

SergeDirect
źródło