• Resuelto isabelgalvez

    (@isabelgalvez)


    Hola,
    estoy intentando optimizar la velocidad de mi página.
    He leído que hay código javascript que bloquea la página al estar en el head. También he leído que había una función que hacía que el javascript se fuera al footer. He puesto esa función y la página funciona correctamente excepto por los sliders que tengo, hechos con el plugin Slider Revolution.
    Mi pregunta es si hay alguna manera de remediarlo (he probado con el plugin autoptimize y se me estropea todo, aparece código en toda la página), y si se puede usar esa función con todos los javascripts excepto aquellos que estén dentro del plugin Slider Revolution.

    Os adjunto la función que ví:

    
    //* Mover javascripts al footer
    function scripts_footer() {
        remove_action('wp_head', 'wp_print_scripts');
        remove_action('wp_head', 'wp_print_head_scripts', 9);
        remove_action('wp_head', 'wp_enqueue_scripts', 1);
     
        add_action('wp_footer', 'wp_print_scripts', 5);
        add_action('wp_footer', 'wp_enqueue_scripts', 5);
        add_action('wp_footer', 'wp_print_head_scripts', 5);
    }
    add_action( 'wp_enqueue_scripts', 'scripts_footer' );
    
    

    Gracias!!

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Moderador LGrusin

    (@lgrusin)

    Los scripts del tema los necesitas, incluso no todos pueden irse al footer. Ve leyendo:
    https://ayudawp.com/aplazar-la-carga-de-javascript-en-wordpress/

    Quizás lo más fácil es algún plugin de caché que te optimice la carga de javascript.

    Un saludo

    • Esta respuesta fue modificada hace 6 años, 3 meses por LGrusin.
    Moderador almendron

    (@almendron)

    También puedes probar lo siguiente:

    // Aplazar JavaScripts
    // Aplaza la carga de jQuery usando la propiedad HTML5 defer
    if (!(is_admin() )) {
        function defer_parsing_of_js ( $url ) {
            if ( FALSE === strpos( $url, '.js' ) ) return $url;
            if ( strpos( $url, 'jquery.js' ) || strpos( $url, 'thickbox.min.js' ) || strpos( $url, 'jquery.min.js') ) return $url;
            // return "$url' defer ";
            return "$url' defer onload='";
        }
        add_filter( 'clean_url', 'defer_parsing_of_js', 11, 1 );
    }

    En la línea
    if ( strpos( $url, 'jquery.js' ) || strpos( $url, 'thick...
    vas indicando los js que quedan al margen.

    El código lo tengo puesto en mi plugin de funciones (funciones) y funciona perfectamente.

    • Esta respuesta fue modificada hace 6 años, 3 meses por almendron.

    Dentro de Autoptimize tienes la opción de excluir los archivos JS que no quieres que vayan al footer.

    En Opciones de Javascript –> Scripts a excluir de Autoptimize:
    Escribe ahí el nombre del archivo de Slider Revolution y listo.

    Te recomiendo añadir en tu archivo functions.php estas líneas de código para eliminar archivos JS innecesarios que vienen con la instalación de WordPress:

    //remove jquery migrate
    add_action( 'wp_default_scripts', function( $scripts ) {
        if ( ! empty( $scripts->registered['jquery'] ) ) {
            $scripts->registered['jquery']->deps = array_diff( $scripts->registered['jquery']->deps, array( 'jquery-migrate' ) );
        }
    } );
    
    //Desactivar los emojis
    remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
    remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
    remove_action( 'wp_print_styles', 'print_emoji_styles' );
    remove_action( 'admin_print_styles', 'print_emoji_styles' );

    Un saludo 🙂

    Iniciador del debate isabelgalvez

    (@isabelgalvez)

    Muchas gracias por vuestras respuestas, he probado la de almendron y me funcionó perfectamente.

    • Esta respuesta fue modificada hace 6 años, 2 meses por isabelgalvez.
    Moderador almendron

    (@almendron)

    De nada. Un saludo.

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • El debate ‘Función que excluya todos los js de un plugin’ está cerrado a nuevas respuestas.