【问题标题】:JavaScript style switcher in WordpressWordpress 中的 JavaScript 样式切换器
【发布时间】:2014-08-06 07:20:20
【问题描述】:

我正在尝试在 Wordpress 中实现一个简单的基于 Toggle 的样式切换器。该解决方案最初是为 HTML 编写的。可以找到here

可以在那里找到必要的 .js 文件。查看下面 Vitch 的 cmets 以更正 stylesheetToggle.js 文件中的一个错误。

这提供了一个简单的文本链接,我可以将它放入我的模板中,在两个样式表之间切换,无需刷新页面,并与一个 cookie 链接,该 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。

页面网址:http://thiscouldbeparadise.org/change/

“焦点模式”应该切换可用的样式表。

【问题讨论】:

    标签: javascript jquery wordpress switchers


    【解决方案1】:

    我查看了您的网址,我想我可以看到问题...

    尝试将 styleswitcher 代码的第 25 行更改为:

    $('link[@rel*=style][title]')
    

    收件人:

    $('link[rel*=style][title]')
    

    我认为@ 对于最新版本的 jQuery 不再是必需的,并且可能会导致问题(我编写了样式切换器代码,但它是多年前的事了,此后 jQuery 发生了很大变化)。当你更新你的 URL 时告诉我,如有必要,我会更新我的脚本副本,这样其他人就不会遇到同样的问题......

    我还注意到,在您的页面中,我目前看不到您尝试添加的两个样式表(“默认”和“对比”)。检查您是否也正确地将它们添加到页面...

    【讨论】:

    • 谢谢你,Vitch。我更改了它,并将我的默认 css 添加到名为“white”的 functions.php 中(请参阅上面的原始帖子)。我更改了 header.php 以反映这一点。现在,按下“对焦模式”,这是我的切换,什么都不做。但它不会像以前那样跳转页面,这是一件好事。
    • 尝试添加 ' ' 到 page.php、single.php、index.php 和 _page-cover-wrap.php(这是“焦点模式”切换的位置)。没有区别。
    • 我可以看到代码已经两次输出到您的页面了!如果您查看源代码并找到“rel="alternate stylesheet" 而不是 rel="white" 就像你所做的那样......
    • 有 ' ' 任何地方都会产生 Too Many Redirects 错误。我尝试了几种组合。澄清一下:a)它应该在header.php中,在head标签中,对吧? b)它也应该在我页面上的某个地方。我试过放入 single.php、page.php 和 _post-cover-wrap.php,这是“焦点模式”出现的地方,应该是切换。由于将链接引用更改为样式表和备用样式表,我收到重定向错误。
    • 我是否需要 index.php 中的代码(参见我上面的原始问题),同时还调用 header.php 中的脚本?
    【解决方案2】:

    你在 wp_enqueue 脚本中有一个错误

    wp_enqueue_script('stylesheetToggle.js');
    

    应该是

    wp_enqueue_script('stylesheetToggle');
    

    您正在加载的文件也需要与 jquery 不冲突,最简单的方法是将文件中的每个 $ 符号替换为单词 jQuery(您正在排队的 2 个文件)。

    还要检查主题的路径是否正确等。

    还可以使用 jsfiddle 检查你的 js 文件,它有一个方便的提示按钮(js 代码中没有 php vars 可以正常工作)。

    如果您仍有问题,请回复。

    【讨论】:

    • 谢谢大卫。我改变了排队。我试图实现没有冲突,但我认为我没有正确地做到这一点。在每个实例中都必须用 jQuery 逐字查找/替换 $?包括第一行? .js 文件在这里:pastebin.com/wwE8674i 我要排队的另一个文件是 .css 文件。我检查了路径。在我看来没问题。我试图让 jsfiddle 工作,但失败了。在这里:jsfiddle.net/immanence/F9HLk/1 我注意到在第二个函数中我添加到了我有 wp_register_script 的 functions.php 中。我将其更改为 wp_register_style。同样,wp_enqueue_style
    • 不,可以按照文件的方式进行操作。检查控制台并开始解决错误。 get_template_directory_uri() 也带参数,所以你需要的是 get_template_directory_uri().'/yourfile.php'
    • 谢谢你,大卫。我编辑了我原来的问题以反映现在更正的错误。所以上面是目前我正在使用的代码,以及在哪里。我在 header.php 中的 href 添加了 /,这似乎消除了 Too Many Redirects 错误。现在,没有控制台错误。但是切换器不起作用。我想是因为我没有调用它。事实上,我不清楚如何调用它,以及在哪里调用它。所以,进步了,但还没有解决。请注意,我没有在标题中包含脚本。这是产生重定向。另外,现在,自定义 css 样式是页面上加载的内容,而不是我的默认样式
    • 移除
    • 我在 header.php 中添加了脚本(参见上面的原始帖子)。我希望正确。在代码上,我不知道如何处理它。它应该去哪里?我应该用:'jQuery(document).ready(function($) { //code.});'
    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多