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');
これは実際にはadminセクションにあります。
WordPress機能は、WordPressがロードされている場合にのみ利用可能です。 style.php
を直接呼び出す場合は、WordPressの機能を使用することはできません。
PHP駆動スタイルシートにWordPressをロードする簡単な方法の1つは、WordPressにエンドポイントを追加することです。テンプレートファイルをロードするカスタムの予約済みURLです。
そこに着くためにあなたがしなければならない:
add_rewrite_endpoint()
で'init'
にエンドポイントを登録します。 'phpstyle'
という名前を付けましょう。
'request'
にフックし、エンドポイント変数'phpstyle'
が設定されている場合は空にしないでください。ここで何が起こっているのかを理解するには、Christopher Davisの優れた A(ほとんどの場合)WordPress書き換えAPIの完全なガイド をお読みください。
'template_redirect'
にフックして、デフォルトのテンプレートファイルindex.php
の代わりにあなたのファイルを配布してください。
簡単にするために、次のデモプラグインのone functionの3つの簡単な手順をすべて組み合わせました。
プラグイン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'] . " */\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' )
の値に応じて、エンドポイントを使用して1つのファイルでさまざまなスタイルシートを配信できます。
警告
これはあなたのサイトを遅くするでしょう。 WordPressは訪問ごとに 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');
この時点で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');