如何在样式表中使用WordPress函数?

时间:2012-06-08 作者:Ronny K

我有我的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\';?>;
}
有什么问题吗?

这是主文件。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\');
这实际上是在管理部分。

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

WordPress函数仅在加载WordPress时可用。如果你打电话给style.php 不能直接使用WordPress函数。

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

要达到目标,您必须:

在上注册端点\'init\' 具有add_rewrite_endpoint(). 我们来命名吧\'phpstyle\'.

钩住\'request\' 并确保端点变量\'phpstyle\' 如果已设置,则不为空。读Christopher Davis的精彩A (Mostly) Complete Guide to the WordPress Rewrite API 了解这里发生了什么。

钩住\'template_redirect\' 并传递您的文件,而不是默认的模板文件index.php.

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

Plugin PHP Style

<?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 你的主题。

Sample style.php

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

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

print get_query_var( \'phpstyle\' );
现在访问yourdomain/phpstyle/. 输出:

/* WordPress 3.3.2 */

default
但如果你去yourdomain/phpstyle/blue/ 输出为:

/* WordPress 3.3.2 */

blue
因此,根据get_query_var( \'phpstyle\' ).

Caveat

这将减慢您的站点速度。必须加载WordPresstwo times 每次访问。如果没有积极的缓存,就不要这样做。

SO网友:majick

您可以通过以下方式加载输出admin-ajax.php, 但更好的方法是使用WordPressSHORTINIT 常量,以便您可以加载所需的函数,但您需要查找并加载wp-load.php 为此,请执行以下操作:

// send CSS Header
header("Content-type: text/css; charset: UTF-8");

// faster load by reducing memory with SHORTINIT
define(\'SHORTINIT\', true);

// recursively find WordPress load
function find_require($file,$folder=null) {
    if ($folder === null) {$folder = dirname(__FILE__);}
    $path = $folder.DIRECTORY_SEPARATOR.$file;
    if (file_exists($path)) {require($path); return $folder;}
    else {
        $upfolder = find_require($file,dirname($folder));
        if ($upfolder != \'\') {return $upfolder;}
    }
}

// load WordPress core (minimal)
$wp_root_path = find_require(\'wp-load.php\');
define(\'ABSPATH\', $wp_root_path);
define(\'WPINC\', \'wp-includes\');
此时,您将need 确保包括任何其他wp-includes 获取主题选项所需的文件-根据您保存和访问这些文件的方式,主题选项会有所不同。(您可能需要在此列表中添加更多内容,以避免出现致命错误-但在您继续操作时,致命错误将告诉您需要添加哪些文件。)例如:。

include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.\'version.php\');
include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.\'general-template.php\');
include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.\'link-template.php\');
然后,一旦拥有了所需的所有函数,就可以使用这些函数输出CSS。。。例如:。

echo \'body {color:\' . get_theme_mod(\'body_color\') . \';}\';
echo \'body {backgroundcolor:\' . get_theme_mod(\'body_background_color\') . \';}\';
exit;
然后,您可以将文件按正常方式排队,例如:

wp_enqueue_style(\'custom-css\',trailingslashit(get_template_directory_uri()).\'styles.php\');

结束