style.php
文件看起来像这样。<?php header('Content-Type: text/css');?>
#div{
background:<?php echo get_option('bgcolor');?>;
}
这不起作用,但是当我这样做时它就起作用。 />
是什么问题?
这是mainfile.php
<?php header('Content-Type: text/css');?>
#div{
background: <?php echo 'blue';?>;
}
这实际上在管理部分。
#1 楼
WordPress功能仅在加载WordPress时可用。如果直接调用style.php
,则无法使用WordPress函数。为PHP驱动的样式表加载WordPress的一种简单方法是向WordPress添加端点:一个自定义的保留URL,用于加载模板文件。
要到达那里,您必须:
在
'init'
上用add_rewrite_endpoint()
注册一个端点。我们将其命名为'phpstyle'
。插入
'request'
,并确保端点变量'phpstyle'
(如果已设置)不为空。阅读克里斯托弗·戴维斯(Christopher Davis)出色的WordPress Rewrite API的A(大多数)完整指南,以了解此处发生的情况。为了简短起见,我在以下演示插件中的一个功能中结合了所有三个简单步骤。插件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;
}
安装插件,请访问一次
'template_redirect'
以刷新重写规则,然后在主题中添加一个index.php
。示例
wp-admin/options-permalink.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' );
现在访问
style.php
。输出:/* WordPress 3.3.2 */
default
但是,如果转到
style.php
,输出为:/* WordPress 3.3.2 */
blue
所以可以使用终结点,以根据
yourdomain/phpstyle/
的值提供带有一个文件的不同样式表。Caveat
这将减慢您的网站速度。每次访问WordPress必须加载两次。没有积极的缓存就不要这样做。
评论
+1以便将此移植到WP。简短的想法:get_query_var('phpstyle')AND! define('SHORTINIT')和define('SHORTINIT',true)可以加快速度...如果可以的话,所有需要的功能都可用...
– kaiser
2012-12-12 14:33
#2 楼
您可以通过admin-ajax.php
加载输出来完成此操作,但是更好的方法是使用WordPress SHORTINIT
常量,这样就可以加载所需的功能,但是您需要查找并加载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');
此时,您需要确保包含获取主题选项所需的其他
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');
评论
将代码添加到我的文件时,它仍然显示未定义。这是我的代码:pastebin.com/BJaUWX1x
– J. Doe
16年3月3日在12:18
您不需要wp-load.php路径上的../../,给出的函数将按原样为您找到...但是就像我说的那样,您确实需要查找并包含所需的任何文件具有您正在使用的功能,例如。 get_background_image在theme.php等文件中……当您添加到CSS时,可能需要更多,因此您将需要学习如何找到它们以有效,可靠地使用此方法。
– majick
16年4月4日在1:08
评论
如何在style.php中调用WordPress?我用了wp_enqueue_scripts();
wp_enqueue_style('my_style',plugin_dir_url(FILE).'Includes / style.php');
我很确定您不会在style.php中使用它。如果WordPress未调用样式文件,则无法使用WordPress功能。