【问题标题】:Wordpress/PHP - load stylesheet when URL parameter is presentWordpress/PHP - 存在 URL 参数时加载样式表
【发布时间】:2015-09-28 08:27:03
【问题描述】:

希望找到一种方法,让 Wordpress 站点仅在存在 URL 参数时才加载样式表。例如,当http://www.somesite.com 被加载时,它将使用主题正在使用的任何样式表。但是如果使用了特定的 URL 参数,则会调用一个额外的样式表。示例http://www.somesite.com?useAltCss=yes。在这种情况下,在主题样式表之后会加载一个附加样式表。这让我有机会仅在使用 URL 参数时覆盖主题样式,并测试样式/布局更改而不影响公众查看。

我假设 header.php 需要修改编码。以下不是有效的 PHP 语法,但让您知道我正在寻找:

<?php
    $param = ($_GET["useAltCss"]);
    if($param == 'yes') {
        <link rel="stylesheet" type="text/css" href="custom.css" />
    } else {
        // Do nothing
    }
?>

更新:

看起来我的原始代码很接近我只需要更改第 4 行:

<link rel="stylesheet" type="text/css" href="custom.css" />

到:

echo('<link rel="stylesheet" type="text/css" href="custom.css" />');

虽然这有效,但我想知道是否有更有效的方法来做到这一点。如果我导航到新页面来测试样式更改,我必须手动添加 URL 参数。如果它以某种方式锁定在 custom.css 样式表中会很棒......也许使用 cookie 或会话?我想知道如何打开/关闭它。想法?

【问题讨论】:

    标签: php wordpress url parameters stylesheet


    【解决方案1】:

    如果您只是为自己使用它,那么我认为您的方法很好......但是 - 对于其他偶然发现这个问题的人 - 我想强调这是 不是 通过这本书。下面建议的第二种方法是一个不错的解决方案,但第一种只能用于非常临时的情况(在每次页面加载时打开会话可能是不必要的,并且会导致一些性能下降)。

    样式表也不应手动打印(即使用&lt;link[...]&gt;),而应在wp_enqueue_scripts 挂钩中使用wp_enqueue_style()

    方法一

    要保留“设置”而不是在每次页面加载时手动输入,您可以使用这样的会话:

    您需要在发送标头之前打开一个会话,所以把它放在wp-config.php:

    //Start the session if it isn't already
    session_start();
    

    其余的放在你想要的样式表的任何地方(很可能在header.php):

    //Check if the parameter is set
    if (isset($_GET["useAltCss"])) {
        if($_GET["useAltCss"] === 'yes') {
            //Adjust the session
            $_SESSION['useAltCss'] = true;
        } else {
            /**
             * If set to anything other than "yes", assume it's being switched
             * off, and adjust the session
             */
            $_SESSION['useAltCss'] = false;
        }
    }
    //Check if the session variable exists, and is currently true
    if (isset($_SESSION['useAltCss']) && $_SESSION['useAltCss'] === true) {
        //And print your stylesheet
        echo '<link rel="stylesheet" type="text/css" href="custom.css" />';
    }
    

    方法二

    另一个(更简单的)选项是简单地检查当前用户是否已登录并能够编辑主题(我希望您这样做):

    if (current_user_can('edit_themes')) {
        echo '<link rel="stylesheet" type="text/css" href="custom.css" />';
    }
    

    ...这当然不允许您来回切换 - 除非每次都登录和退出。

    【讨论】:

    • 谢谢,您的第二个选项很有趣,而且我没有考虑过。我会尝试他们两个。非常感谢。
    • 好的,所以我尝试了基于会话的方法。如果 URL 参数的值为“yes”,则加载自定义样式表,但一旦我导航到另一个页面或重新加载没有 URL 参数的当前页面,则不会加载自定义样式表。会话似乎没有从一个页面粘到另一个页面。
    • 听起来像是您服务器上的会话的一般问题,除非我输入了一些错字(我仍然无法发现) - 如果您在 session_start() 呼叫之后立即 die(var_export($_SESSION, true)),您会得到什么?
    • 您的 die 命令是在 session_start() 之后添加的。这出现在 HTML 源代码中:'array ()' 并且页面在那里结束。不解析正文/页脚 HTML。
    • 不确定这是否重要,但这个 Wordpress 站点运行在 IIS7(Windows Server 2008 R2)上,而不是典型的 Unix 风格服务器。
    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2013-10-25
    相关资源
    最近更新 更多