Как динамически добавить файл .js только на одну конкретную страницу в раздел Head

16 нояб. 2013 г., 11:01:29
Просмотры: 17.4K
Голосов: 4

Мне нужно добавить несколько скриптов для Google Maps только на страницу контактов, и я не хочу загружать их на всех страницах. Я также не хочу создавать кастомный заголовок, поэтому интересно, есть ли способ добавить js-файл только на страницу контактов? В данный момент я использую этот код для добавления JavaScript в тему:

//Загрузка скриптов
function load_scripts(){
    wp_deregister_script('jquery'); // Отменяем регистрацию существующего jQuery
    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);
}

Но, как я уже сказал, у меня есть еще один файл под названием googlemap.js. Можете ли вы подсказать, как я могу добавить его ТОЛЬКО на страницу контактов с помощью этого кода? Другой момент - WordPress добавляет этот код в конец body (перед закрывающим тегом), что я не понимаю как и почему! Но в моем случае мне нужно добавить код в раздел <head>! Подскажите, как это можно сделать.

Спасибо

0
Все ответы на вопрос 2
9

Используйте условную функцию is_page() для загрузки скриптов на определенной странице.

Вот модифицированная версия вашей функции:

//Загрузка скриптов
function load_scripts(){
    wp_deregister_script('jquery'); // Отменить регистрацию существующего jQuery
    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' );

    // зарегистрировать скрипт
    wp_register_script( 'my-script', 'URL к скрипту' ); // по умолчанию скрипт загрузится в head

    // условная загрузка для страницы
    if (is_page( 'Contact' )) {
        wp_enqueue_script('my-script');
    }
}
16 нояб. 2013 г. 11:28:51
Комментарии

Спасибо, Сисир, у меня есть несколько вопросов! Почему ты добавил wp_enqueue_script(''); в код и почему код добавляется в body, а не в head? Как я могу заставить добавить my-script в head?

Behseini Behseini
16 нояб. 2013 г. 11:33:53

по умолчанию скрипты загружаются в <head>, а не в футер. Ты можешь управлять этим при регистрации скрипта, смотри wp_register_script() ищи аргумент $in_footer

Sisir Sisir
16 нояб. 2013 г. 11:36:35

Спасибо, но он добавляется в body!

Behseini Behseini
16 нояб. 2013 г. 11:38:03

Убедитесь, что вы очистили кеш браузера. Есть ли у вас URL, где я могу увидеть это в действии?

Sisir Sisir
16 нояб. 2013 г. 11:43:25

Да www.teddybearfamilychildcare.com

Behseini Behseini
16 нояб. 2013 г. 11:44:19

Какой скрипт вы хотите загрузить в head?

Sisir Sisir
16 нояб. 2013 г. 11:47:11

давайте продолжим обсуждение в чате

Behseini Behseini
16 нояб. 2013 г. 11:47:53

Разве не должно быть if ( is_page('Contact') )?

Django Reinhardt Django Reinhardt
31 июл. 2015 г. 17:53:33

@Sisir: можно задать два вопроса? Попробую: 1. как использовать подключенный скрипт со страницы? 2. Что означает "Contact" в последнем примере? Это URL страницы?

3000 3000
4 апр. 2017 г. 10:06:25
Показать остальные 4 комментариев
0

Вот несколько полезных трюков для вас

Примечание:

wp_register_script(); // только регистрирует JS файл, но не запускает его
wp_deregiser_script(); // полностью удаляет JS файл, это не лучший метод, лучше использовать проверку условий страницы

//Запуск JS
wp_enqueue_script(); // использует только зарегистрированный JS файл
wp_dequeue_script(); // эта функция предотвращает запуск JS файла, это хороший метод для проверки условий страницы

В вашем файле functions.php

function js_library() {

    //1. Метод
    if ( is_front_page() ) {
        //wp_dequeue_script();
    }

    //2. Метод
    if ( is_page(120)) { //120 - это ID страницы, вы можете получить ID страницы используя $post->ID или get_the_ID
        //wp_dequeue_script();
    }

    if ( is_page($post->ID) == 120 ) { //120 - это ID вашей страницы
        //wp_dequeue_script();
    }

    if ( is_page('about-us') ) { //about-us - это ярлык страницы (slug), вы можете получить его из URL: http://yourdomain.com/about-us
        //wp_dequeue_script();
    }

    $remove_js_pages = array('about-us', 'contact-us', 'service'); // для нескольких ярлыков страниц
    if ( is_page($remove_js_pages) ) { //помните, вы можете получить ярлык страницы из URL вашей страницы ;-)
        //wp_dequeue_script();
    }

    //Использование имени страницы
    $pagename = get_query_var('pagename');
    if ( !$pagename && $id > 0 ) {
        // Если статическая страница установлена как главная, $pagename не будет установлен. Получите его из запрашиваемого объекта
        $post = $wp_query->get_queried_object();
        $pagename = $post->post_name;
    }

    if ( is_page() == $pagename ) {
        //wp_dequeue_script();
    }
}
16 нояб. 2013 г. 12:06:54