Самый эффективный способ добавления javascript файла для конкретной записи и/или страницы?

10 окт. 2012 г., 22:30:36
Просмотры: 59.1K
Голосов: 28

Я хочу узнать, какой самый эффективный метод добавления javascript файла конкретно для записи и/или страницы.

Вот несколько решений, которые я придумал:

  • Переключиться в режим редактирования HTML и разместить там JavaScript (довольно плохое решение)
  • Использовать произвольные поля с определенным JavaScript для этой записи/страницы в парах ключ-значение
  • В footer.php загружать JavaScript файлы в зависимости от того, на какой странице вы находитесь (но это приводит к большому количеству условных операторов)

Кстати, ни один из JavaScript файлов не будет использоваться совместно между страницами - он будет буквально специфичным для того, что вы просматриваете в данный момент.

Есть какие-нибудь мысли?

3
Комментарии

Метабоксы / произвольные поля — ваш лучший вариант

Miha Rekar Miha Rekar
10 окт. 2012 г. 22:33:14

Как бы вы определили эффективность?

fuxia fuxia
10 окт. 2012 г. 22:44:45

Под "эффективностью" я подразумеваю минимальное избыточность кода и наиболее действенный способ реализации этого именно для отдельной записи/страницы.

mousesports mousesports
10 окт. 2012 г. 23:44:17
Все ответы на вопрос 3
7
50

Я считаю, что лучший баланс между эффективностью и использованием правильных методов WordPress для добавления JavaScript — это добавить что-то подобное в файл functions.php вашей темы. Например:

functions.php:

function load_scripts() {
    global $post;

    if( is_page() || is_single() )
    {
        switch($post->post_name) // post_name — это ярлык записи (slug), который здесь удобнее использовать для сопоставления
        {
            case 'home':
                wp_enqueue_script('home', get_template_directory_uri() . '/js/home.js', array('jquery'), '', false);
                break;
            case 'about-page':
                wp_enqueue_script('about', get_template_directory_uri() . '/js/about-page.js', array('jquery'), '', true);
                break;
            case 'some-post':
                wp_enqueue_script('somepost', get_template_directory_uri() . '/js/somepost.js', array('jquery'), '1.6', true);
                break;
        }
    } 
}

add_action('wp_enqueue_scripts', 'load_scripts');

Это дает вам полный контроль над тем, какие скрипты загружаются и где, централизованное место в файле functions.php вашей темы для редактирования загрузки скриптов, а также использует правильные методы WordPress для безопасного добавления JavaScript на ваши страницы и записи.

11 окт. 2012 г. 00:45:08
Комментарии

Хорошая небольшая функция. Ты прав насчёт полезности "централизованного расположения". Большое спасибо.

mousesports mousesports
11 окт. 2012 г. 00:57:31

Думаю, это можно немного улучшить. По сути ты проверяешь одно и то же двумя разными switch-условиями. Я бы предложил объединить оба switch-условия, а условный оператор if можно сделать if (is_page() || is_single()). Что думаешь, Бен?

mousesports mousesports
11 окт. 2012 г. 04:40:52

Звучит как улучшение. Отличная идея!

Ben HartLenn Ben HartLenn
11 окт. 2012 г. 05:01:01

@Ben это functions.php в теме или в wp-includes? Мой заголовок страницы — Access to Home Online, и я вставил вашу функцию, заменив home на Access to Home Online, но это не работает?

Ciasto piekarz Ciasto piekarz
7 февр. 2017 г. 09:55:49

@Ciastopiekarz Я обновил свой ответ, чтобы четче показать, что код должен быть в файле functions.php вашей темы.

Ben HartLenn Ben HartLenn
13 мар. 2017 г. 03:16:33

Не проблема, я давно уже заставил это работать

Ciasto piekarz Ciasto piekarz
14 мар. 2017 г. 00:20:35

Это не работает для дочерних тем, но это можно легко исправить. Замените get_template_directory_uri() на get_stylesheet_directory_uri()

jastram jastram
30 дек. 2020 г. 16:12:15
Показать остальные 2 комментариев
2

Я бы разместил код в футере или шапке сайта и использовал PHP-условия.

Например:

<?php if (is_page ('your-page')){?>

  <script type="text/javascript" src"the file path"></script>

<?php } elseif ( is_page ('another')){?>

  <script type="text/javascript" src"the file path"></script>

<?php } else { ?>

  <script type="text/javascript" src"the file path"></script>

<?php } ?>

Таким образом, вы не загружаете все скрипты каждый раз при загрузке страницы, а подключаете только необходимые.

Вот ссылка на WordPress Codex: http://codex.wordpress.org/Conditional_Tags

А если у вас есть специальные скрипты, которые могут понадобиться только для отдельных записей, используйте произвольные поля.

10 окт. 2012 г. 23:18:18
Комментарии

Спасибо, Николь - это был вариант №3. Достаточно неплохое решение, учитывая, что у меня будет не так много страниц... всё ещё рассматриваю его.

mousesports mousesports
10 окт. 2012 г. 23:45:50

То, что у меня описано выше, можно использовать с различными элементами WordPress Codex, такими как: is_categories, is_single (для записей), is_post_type ... Я добавил ссылку на список условных тегов WordPress в своем ответе выше.

Nicole Nicole
10 окт. 2012 г. 23:48:37
0

Другой проверенный способ — добавить код непосредственно на страницу через редактор и включить комментарии внутри тега script, иначе он не будет работать.

<script type="text/javascript">
<!--
var a = 5;
alert("Привет, мир. Значение переменной a равно: " + a);
-->
</script>
2 мар. 2017 г. 06:07:16