Как использовать jQuery UI tabs на странице WordPress?

4 июл. 2011 г., 04:44:20
Просмотры: 19.6K
Голосов: 2

Я хочу использовать вкладки jQuery UI на своих страницах WordPress 3.1.4. Я пишу учебные пособия по программированию для аудитории VB .NET, но также хочу предоставлять исходный код на C#, и хочу использовать вкладки, чтобы читатели могли переключаться между ними. Возможно, я мог бы сделать свои собственные, если бы было время, но это должен был быть проект "изучения jQuery". Оказалось, это больше похоже на проект "WTF WordPress". Я плохо разбираюсь в JS и пытаюсь это исправить. Я не эксперт по WP и пока не хочу изучать больше, чем необходимо.

У меня есть страница, которая представляет собой просто копию демо jQuery UI Tabs. Она не работает - список и все div видны, и нет самих вкладок. Я понимаю, что это потому, что мне нужен CSS, но на этом этапе я устал. Я не уверен, что наличие CSS решит проблему, и даже не знаю, как определить, проблема в CSS, JS или WP. До этого проекта мой блог "просто работал", и мне так нравится.

Первое, что я попробовал - добавить Google CDN для jQuery в header.php своей темы. Я мог заставить работать alerts, но вкладки не появлялись, что бы я ни делал. (Теперь я понимаю, что мне нужен был CSS. Спасибо, документация jQuery, что не упомянули об этом!) После исследований я понял, что WP загружает jQuery, как и многие плагины (хотя у меня только Spam Karma и Akismet). Было логично предположить, что загрузка jQuery от Google могла вызвать путаницу. Я нашел несколько сайтов, предлагающих использовать wp_enqueue_script() в заголовке. В документации перечислено множество скриптов, поэтому я добавил "jquery", "jquery-ui-core" и "jquery-ui-tabs". Я вижу тег script, загружающий jQuery (версия 1.4.4...) в заголовке, но другие теги, похоже, не работают. Я понимаю, что он загружается в режиме "no conflict", поэтому нужно использовать "jQuery()" вместо "$()". Я могу заставить работать alerts, но не вкладки. Опять же, я подозреваю, что моя страница вообще не пытается загрузить jQuery UI. Даже если бы загружала, не уверен, что WP поставляется с правильным CSS. Я видел несколько страниц, предлагающих загружать jQuery UI в подвале страницы, другие утверждают, что нужно добавлять что-то в functions.php, что я не понимаю, а некоторые решения слишком старые, чтобы им доверять. Я не знаю, что пробовать дальше.

Если бы я разобрался, какой CSS нужен (спасибо еще раз, "документация" jQuery!), я мог бы заставить вкладки работать в локальном файле. В WP я использую тему TwentyTen; мои единственные изменения - добавление скриптов SyntaxHighlighter (которые я отключу, если кто-то скажет, что я близок к решению и они могут быть проблемой). Сегодня я обновился до WP 3.1.4. Вот содержимое соответствующих файлов, вы можете посмотреть исходный код, чтобы увидеть HTML:

header.php

<?php wp_enqueue_script("jquery"); ?>
<?php wp_enqueue_script("jquery-ui-core"); ?>
<?php wp_enqueue_script("jquery-ui-tabs"); ?>
<script type="text/javascript" src="http://www.owenpellegrin.com/blog/highlight/scripts/shCore.js"></script>
<script type="text/javascript" src="http://www.owenpellegrin.com/blog/highlight/scripts/shBrushCSharp.js"></script>
<script type="text/javascript" src="http://www.owenpellegrin.com/blog/highlight/scripts/shBrushVb.js"></script>
<script type="text/javascript" src="http://www.owenpellegrin.com/blog/highlight/scripts/shBrushXml.js"></script>
<link type="text/css" rel="stylesheet" href="http://www.owenpellegrin.com/blog/highlight/styles/shCore.css"/>
<link type="text/css" rel="stylesheet" href="http://www.owenpellegrin.com/blog/highlight/styles/shThemeDefault.css"/>
<script type="text/javascript">
    SyntaxHighlighter.all();
</script>
<meta charset="<?php bloginfo( 'charset' ); ?>" />
<title><?php
(... остальная часть стандартного header.php TwentyTen ...)

ссылка на страницу

<script>
jQuery("document").ready(function() {
    jQuery( "#tabs" ).tabs();
});
</script>

<div id="tabs">
    <ul>
        <li><a href="#tabs-1">Nunc tincidunt</a></li>
        <li><a href="#tabs-2">Proin dolor</a></li>
        <li><a href="#tabs-3">Aenean lacinia</a></li>
    </ul>
    <div id="tabs-1">
        <p>Содержимое вкладки 1.</p>
    </div>
    <div id="tabs-2">
        <p>Содержимое вкладки 2</p>
    </div>
    <div id="tabs-3">
        <p>Содержимое вкладки 3</p>
    </div>
</div>

Я добавил вызов ready(), потому что мне было интересно, возможно, код из демо не выполнялся. Я также пробовал этот вариант кода без успеха:

jQuery("document").ready(function() {
    jQuery( "#tabs" ).tabs();
});

Что я упускаю?

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

Ядро WordPress поддерживает вкладки в дизайне. Посмотрите плагин, чтобы определить код и стили https://github.com/bueltge/wordpress-admin-style/ Однако вам нужно добавить JavaScript для переключения между вкладками, если вам нравится этот способ. Также возможен вариант перезагрузки через PHP.

bueltge bueltge
9 янв. 2020 г. 15:30:01
Все ответы на вопрос 5
1

Короткий ответ заключается в том, что вам нужно подключить CSS "Тему" jQuery UI к вашему коду. Фреймворк jQuery UI на самом деле представляет собой комбинацию JavaScript и CSS (и похоже, что вы подключили только JavaScript).

В качестве быстрого теста я применил "Базовую" тему к вашему коду здесь. (Обратите внимание, что в боковой панели, в разделе Manage Resources, есть ссылка на файл jqueryui.css, размещенный на Google).

jQuery UI имеет множество готовых тем, которые вы можете использовать. (См. вкладку "Галерея"). Или вы можете создать свою! Довольно гибко.

Чтобы немного расширить ответ... Я рекомендую использовать CDN от Google вместо встроенных файлов jQuery по двум причинам.

  1. Вы получите более новые версии
  2. Это будет быстрее

Но ваше исследование верно... Вы не хотите просто подключить ссылку на jQuery CDN в заголовке, потому что тогда WordPress не знает, что вы уже подключили его! (И у вас возникнут конфликты с другими плагинами, которым требуется jQuery). Простое решение — добавить следующий фрагмент кода в ваш файл functions.php:

// кастомные очереди скриптов
if (!is_admin()) {
    wp_deregister_script('jquery');
    wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"), false);
    wp_enqueue_script('jquery');
}

Этот код, по сути, говорит WordPress игнорировать его собственную версию jQuery, использовать ссылку, указанную здесь, и затем добавить её в очередь! (Теперь, если другой плагин "запросит" jQuery через API WordPress, он узнает, что он уже загружен и готов к использованию).

Лично я не беспокоюсь о подобном с jQuery UI. Я ещё не использовал плагин, который явно хочет загрузить его самостоятельно. Поэтому в моём header.php я просто подключаю его сам, вместе с понравившейся мне темой:

<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/cupertino/jquery-ui.css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js"></script>

Удачи с вашим проектом!

4 июл. 2011 г. 19:09:46
Комментарии

Да! То, что нужно! Единственное, что потребовало немного времени для настройки — это убедиться, что <link> и <script> для jQuery UI загружаются после wp_head(); в моей первой попытке jQuery UI загружался раньше jQuery. Это не оптимально. Теперь осталось только определиться со стилями CSS; пока я доволен. Спасибо!

User User
4 июл. 2011 г. 20:35:08
0

В WordPress уже есть множество UI-эффектов. документация

Шаг 1. Добавьте эффект в файл functions.php вашей темы

function add_theme_scripts() {
    wp_enqueue_script("jquery-ui-tabs");
}
add_action( 'wp_enqueue_scripts', 'add_theme_scripts' );

Шаг 2. Добавьте HTML-разметку

<div id="tabs">
  <ul>
    <li><a href="#tabs-1">Nunc tincidunt</a></li>
    <li><a href="#tabs-2">Proin dolor</a></li>
    <li><a href="#tabs-3">Aenean lacinia</a></li>
  </ul>
  <div id="tabs-1">
    <p>Вкладка 1</p>
  </div>
  <div id="tabs-2">
    <p>Вкладка 2</p>
  </div>
  <div id="tabs-3">
    <p>Вкладка 3</p>
  </div>
</div>

Шаг 3: Добавьте скрипт в footer.php

<script>
jQuery(document).ready(function($) {
    $('#tabs').tabs();
})    
</script>
9 янв. 2020 г. 15:24:39
0

Вы можете использовать плагин ThePath Tabbed Widget для этого: Jquery UI Tabbed Widget Wordpress Плагин

24 июл. 2011 г. 13:50:36
0

Добавьте следующее в functions-user.php

function my_scripts_method() {
    // Отменяем регистрацию стандартного jQuery
    wp_deregister_script( 'jquery' );
    // Регистрируем jQuery с CDN Google
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js');
    // Подключаем jQuery
    wp_enqueue_script( 'jquery' );

    // Отменяем регистрацию jQuery UI Core
    wp_deregister_script( 'jquery-ui-core' );
    // Регистрируем jQuery UI с CDN Google
    wp_register_script( 'jquery-ui-core', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js');
    // Подключаем jQuery UI Core
    wp_enqueue_script( 'jquery-ui-core' );
}    

// Добавляем обработчик для подключения скриптов
add_action('wp_enqueue_scripts', 'my_scripts_method');


function my_stylesheets_method(){
    // Регистрируем стили jQuery UI (тема Cupertino) с CDN Google
    wp_register_style('myStyleSheets', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/cupertino/jquery-ui.css');
    // Подключаем стили
    wp_enqueue_style( 'myStyleSheets');
}
// Добавляем обработчик для подключения стилей
add_action('wp_print_styles', 'my_stylesheets_method');
19 нояб. 2011 г. 18:31:54
1

Wordpress.org больше не разрешает плагины, которые загружают внешний jQuery UI, так как он уже входит в состав WordPress. Небольшое предупреждение для тех, кто разрабатывает новые плагины.

7 июл. 2013 г. 20:37:19
Комментарии

Это не так. Замена этих библиотек по-прежнему разрешена на фронтенде. Просто это не рекомендуется по веским причинам.

fuxia fuxia
7 июл. 2013 г. 20:45:02