Переключатель стилей JavaScript в Wordpress
Я пытаюсь реализовать простой переключатель стиля на основе Toggle в Wordpress. Решение изначально было написано для HTML. Это можно найти здесь.
Необходимые файлы.js можно найти там. Посмотрите на комментарии Vitch ниже, чтобы исправить одну ошибку в файле stylesheetToggle.js.
Это обеспечивает простую текстовую ссылку, которую я могу вставить в свой шаблон, которая переключается между двумя таблицами стилей без обновления страницы, и связана с файлом cookie, который запоминает выбор пользователя, если они переходят в другое место на сайте.
Это то, что я получил до сих пор (извините, я собираю это воедино из того, что я могу выучить, читая множество попыток создать переключатель стиля).
Для простоты все файлы находятся в корне папки моей темы.
Я добавил это в мои functions.php:
function wpb_adding_scripts() {
wp_register_script('stylesheetToggle', get_template_directory_uri() . '/stylesheetToggle.js', array('jquery'),'1.1', false);
wp_enqueue_script('stylesheetToggle');
}
add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' );
function wpb_adding_styles() {
wp_register_style('contrast', get_stylesheet_directory_uri() . '/contrast.css');
wp_enqueue_style('contrast');
wp_register_style('white', get_stylesheet_directory_uri() . '/style.css');
wp_enqueue_style('white');
}
add_action( 'wp_enqueue_scripts', 'wpb_adding_styles' );
Затем в моем index.php я добавил (вверху, над get_header();?>):
<?php wp_enqueue_script("stylesheetToggle"); ?>
В моем header.php я добавил:
<link rel="stylesheet" type="text/css" href=" ... /style.css" title="white">
<link rel="alternate stylesheet" type="text/css" href=" ... /contrast.css" title="contrast">
<?php wp_enqueue_script("stylesheetToggle"); ?>
ПРИМЕЧАНИЕ. URL-адреса таблиц стилей должны быть абсолютными путями.
Это также идет в header.php, между концом "head" и началом "body":
<script>
jQuery.noConflict();
jQuery(document).ready(function($) {
$(function()
{
// Call stylesheet init so that all stylesheet changing functions
// will work.
$.stylesheetInit();
// This code loops through the stylesheets when you click the link with
// an ID of "toggler" below.
$('#toggler').bind(
'click',
function(e)
{
$.stylesheetToggle();
return false;
}
);
// When one of the styleswitch links is clicked then switch the stylesheet to
// the one matching the value of that links rel attribute.
$('.styleswitch').bind(
'click',
function(e)
{
$.stylesheetSwitch(this.getAttribute('rel'));
return false;
}
);
}
);
});
</script>
В мой соответствующий файл шаблона я добавил:
<a href="#" id="toggler">Focus mode</a>
РЕЗУЛЬТАТ: Это работает сейчас, благодаря Vitch и David.
URL страницы: http://thiscouldbeparadise.org/change/
"Режим фокуса" должен переключать доступные таблицы стилей.
2 ответа
Я посмотрел ваш URL и думаю, что вижу проблему...
Попробуйте изменить строку 25 кода стиля переключателя с:
$('link[@rel*=style][title]')
Для того, чтобы:
$('link[rel*=style][title]')
Я думаю, что @
больше не требуется в последних версиях jQuery и может вызывать проблемы (я написал код переключения стилей, но это было много лет назад, и с тех пор jQuery сильно изменился). Дайте мне знать, когда вы обновите свой URL, и, если необходимо, я обновлю свою копию сценария, чтобы другие люди не столкнулись с той же проблемой...
Я также заметил, что на вашей странице я не вижу две таблицы стилей ("по умолчанию" и "контраст"), которые вы пытались добавить. Проверьте, правильно ли вы добавляете их на страницу...
У вас ошибка в скриптах wp_enqueue
wp_enqueue_script('stylesheetToggle.js');
должно быть
wp_enqueue_script('stylesheetToggle');
также файл, который вы загружаете, не должен находиться в состоянии конфликта jquery, простейший способ сделать это - заменить каждый символ $ словом jQuery в ваших файлах (2 файла, которые вы ставите в очередь).
Также проверьте правильность пути к вашей теме и т. Д.
Также проверьте js-файлы с помощью jsfiddle, у него есть удобная кнопка подсказки (в коде js нет php-переменных, чтобы это работало).
Отпишитесь, если у вас все еще есть проблемы.