Cómo agregar un archivo .js solo en una página específica dinámicamente en el Head

16 nov 2013, 11:01:29
Vistas: 17.4K
Votos: 4

Necesito agregar algunos scripts para Google Maps solo en mi página de contacto y no quiero cargarlos en todas las páginas. Tampoco quiero crear un header personalizado, así que me preguntaba si hay alguna manera de cargar el archivo js únicamente en la página de contacto. Actualmente estoy usando este código para añadir javascript al tema:

// Cargar Scripts
function load_scripts(){
    wp_deregister_script('jquery'); // Desregistrar jQuery existente
    wp_enqueue_script('jquery', 'http://code.jquery.com/jquery.js', '', '', true);
    wp_enqueue_script('bootstrap-jquery', get_template_directory_uri().'/assets/js/bootstrap.js', '', '', true);
}

Pero como dije, tengo otro archivo llamado googlemap.js. ¿Podrías decirme si puedo agregarlo SOLO en la página de contacto desde este código? Otro punto es que WordPress está agregando este código al final del body (antes de la etiqueta </body>) ¡lo cual no sé cómo ni por qué ocurre! Pero en mi caso específico necesito agregar el código en el <head>. ¿Podrías indicarme cómo puedo hacer esto?

Gracias

0
Todas las respuestas a la pregunta 2
9

Usa el condicional is_page() para cargar scripts en páginas específicas.

Aquí está la versión modificada de tu función:

//Cargar Scripts
function load_scripts(){
    wp_deregister_script('jquery'); // Desregistrar jQuery existente
    wp_register_script('jquery', 'http://code.jquery.com/jquery.js', '', '', true);
    wp_enqueue_script( 'jquery' );

    wp_register_script('bootstrap-jquery',get_template_directory_uri().'/assets/js/bootstrap.js', array( 'jquery' ), '', true);
    wp_enqueue_script( 'bootstrap-jquery' );

    // registrar el script
    wp_register_script( 'my-script', 'URL al Script' ); // por defecto el script se carga en el head

    // cargar condicionalmente en página
    if (is_page( 'Contacto' )) {
        wp_enqueue_script('my-script');
    }
}
16 nov 2013 11:28:51
Comentarios

¡Gracias Sisir! Solo tengo algunas preguntas aquí. ¿Por qué agregaste el wp_enqueue_script(''); al código y cómo es que el código se está agregando al cuerpo y no a la cabeza? ¿Cómo puedo forzar a que mi-script se agregue a la cabeza?

Behseini Behseini
16 nov 2013 11:33:53

por defecto los scripts se cargan en el <head> no en el pie de página. Puedes controlar esto cuando registras un script, mira wp_register_script() busca el argumento $in_footer

Sisir Sisir
16 nov 2013 11:36:35

¡Gracias, pero se está agregando al cuerpo!

Behseini Behseini
16 nov 2013 11:38:03

asegúrate de borrar la caché del navegador. ¿Tienes alguna URL donde pueda verlo en acción?

Sisir Sisir
16 nov 2013 11:43:25

www.teddybearfamilychildcare.com

Behseini Behseini
16 nov 2013 11:44:19

¿cuál es el script que quieres cargar en el head?

Sisir Sisir
16 nov 2013 11:47:11

continuemos esta discusión en el chat

Behseini Behseini
16 nov 2013 11:47:53

¿No debería ser if ( is_page('Contact') )?

Django Reinhardt Django Reinhardt
31 jul 2015 17:53:33

@Sisir : ¿puedo hacer dos preguntas? Intento: 1. ¿cómo uso el script encolado desde la página? 2. ¿Qué es "Contact" en el último ejemplo? ¿La URL de la página?

3000 3000
4 abr 2017 10:06:25
Mostrar los 4 comentarios restantes
0

Aquí tienes algunos trucos para ti

Nota:

wp_register_script(); // solo registra el archivo js, no lo ejecuta
wp_deregiser_script(); // elimina completamente el archivo js, no es el mejor método, es mejor usar comprobaciones condicionales de página

//Ejecutar Js
wp_enqueue_script(); // usa solo tu archivo js registrado,
wp_dequeue_script(); // esta función evita que se ejecute el archivo js, es un buen método para usar en comprobaciones condicionales de página

En tu archivo functions.php

function js_library() {

    //1. Método
    if ( is_front_page() ) {
        //wp_dequeue_script();
    }

    //2. Método
    if ( is_page(120)) { //120 es el id de página, puedes obtener el id de página usando $post->ID o get_the_ID
        //wp_dequeue_script();
    }

    if ( is_page($post->ID) == 120 ) { //120 es tu id de página
        //wp_dequeue_script();
    }

    if ( is_page('about-us') ) { //about-us usa el slug de página, puedes obtener el slug de página en http://tudominio.com/about-us
        //wp_dequeue_script();
    }

    $remove_js_pages = array('about-us', 'contact-us', 'service'); // para múltiples slugs de página
    if ( is_page($remove_js_pages) ) { //recuerda que puedes obtener el slug de página desde la URL de tu página ;-)
        //wp_dequeue_script();
    }

    //Usando el nombre de página
    $pagename = get_query_var('pagename');
    if ( !$pagename && $id > 0 ) {
        // Si una página estática está configurada como página de inicio, $pagename no estará definido. Recupéralo del objeto consultado
        $post = $wp_query->get_queried_object();
        $pagename = $post->post_name;
    }

    if ( is_page() == $pagename ) {
        //wp_dequeue_script();
    }
}
16 nov 2013 12:06:54