问题描述

我的 style.php 文件看起来像这样。

<?php  header('Content-Type: text/css');?>
#div{
    background:<?php  echo get_option('bgcolor');?>;
}

这不行,但是当我这样做它是有效的。

<?php  header('Content-Type: text/css');?>
#div{
    background: <?php  echo 'blue';?>;
}

会是什么问题?

这是 mainfile.php

 <?php

    function test(){
    global get_option('bgcolor');?>

        <input type="text" id="bgcolor" name="post_popup_settings[bgcolor]" value="<?php echo get_option('bgcolor');?> " />
    <?php
}
    add_action('admin_head','test');

这实际上在管理部分。

最佳解决方案

WordPress 功能仅在 WordPress 加载时才可用。如果直接调用 style.php,则无法使用 WordPress 功能。

为 PHP 驱动样式表加载 WordPress 的一种简单方法是向 WordPress 添加一个端点:一个自定义的保留 URL,您可以在其中加载模板文件。

要到达那里,你必须:

  1. 使用 add_rewrite_endpoint()'init'上注册端点。我们来命名为'phpstyle'

  2. 挂接到'request'中,如果设置端点变量'phpstyle'不为空。阅读 Christopher Davis 的优秀 A (Mostly) Complete Guide to the WordPress Rewrite API 了解这里发生了什么。

  3. 钩入'template_redirect'并提交您的文件,而不是默认的模板文件 index.php

为了保持简短,我将以下演示插件中的所有三个简单步骤组合在一个函数中。

插件 PHP 风格

<?php # -*- coding: utf-8 -*-
/*
 * Plugin Name: PHP Style
 * Description: Make your theme's 'style.php' available at '/phpstyle/'.
 */
add_action( 'init',              'wpse_54583_php_style' );
add_action( 'template_redirect', 'wpse_54583_php_style' );
add_filter( 'request',           'wpse_54583_php_style' );

function wpse_54583_php_style( $vars = '' )
{
    $hook = current_filter();

    // load 'style.php' from the current theme.
    'template_redirect' === $hook
        && get_query_var( 'phpstyle' )
        && locate_template( 'style.php', TRUE, TRUE )
        && exit;

    // Add a rewrite rule.
    'init' === $hook && add_rewrite_endpoint( 'phpstyle', EP_ROOT );

    // Make sure the variable is not empty.
    'request' === $hook
        && isset ( $vars['phpstyle'] )
        && empty ( $vars['phpstyle'] )
        && $vars['phpstyle'] = 'default';

    return $vars;
}

安装插件,一次访问 wp-admin/options-permalink.php 刷新重写规则,并在主题中添加一个 style.php

样品 style.php

<?php # -*- coding: utf-8 -*-
header('Content-Type: text/css;charset=utf-8');

print '/* WordPress ' . $GLOBALS['wp_version'] . " */nn";

print get_query_var( 'phpstyle' );

现在访问 yourdomain/phpstyle/。输出:

/* WordPress 3.3.2 */

default

但是如果你去 yourdomain/phpstyle/blue/的输出是:

/* WordPress 3.3.2 */

blue

因此,您可以使用端点根据 get_query_var( 'phpstyle' )的值将一个文件传递给不同的样式表。

警告

这将减慢您的网站。 WordPress 每次访问必须加载两次。不要没有积极的缓存就行。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。