スタイルシートでWordPress関数を使用するにはどうすればよいですか?


21

私は自分のしている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');

これは実際には管理セクションにあります。


style.phpで
FUXIA

wp_enqueue_scripts()を使用しました。
ロニー

wp_enqueue_style( 'my_style'、plugin_dir_url(FILE).'Includes / style.php ');
ロニー

1
私はあなたがそれを使用しないことをかなり確信していますstyle.php。スタイルファイルがWordPressによって呼び出されない場合、WordPress機能は使用できません。
FUXIA

回答:


26

WordPressの機能は、WordPressがロードされている場合にのみ使用できます。をstyle.php直接呼び出す場合は、WordPress機能を使用できません。

PHP駆動のスタイルシート用のWordPressをロードする簡単な方法の1つは、WordPressにエンドポイントを追加することです。テンプレートファイルをロードするカスタムの予約済みURLです。

そこに着くには:

  1. 上のエンドポイントを登録'init'してadd_rewrite_endpoint()。名前を付けましょう'phpstyle'

  2. フックし'request'て、エンドポイント変数'phpstyle'が設定されている場合は空になっていないことを確認します。ここで何が起こっているのかを理解するために、クリストファー・デイビスの優れたA(ほとんど)WordPress Rewrite APIの完全なガイドを読んでください。

  3. 'template_redirect'デフォルトのテンプレートファイルの代わりにファイルをフックして配信しますindex.php

短くするために、次のデモプラグインの1つの関数で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

したがって、エンドポイントを使用して、の値に応じて1つのファイルで異なるスタイルシートを配信できますget_query_var( 'phpstyle' )

警告

これにより、サイトの速度が低下します。WordPressは、訪問ごとに2回ロードする必要があります。積極的なキャッシュなしでそれをしないでください。


これをWPに移植するための+1。ショートアイデア:get_query_var( 'phpstyle' ) AND ! defined( 'SHORTINIT' ) AND define( 'SHORTINIT', true )スピードのものまで...そして、すべての必要な機能が用意されていた場合...
カイザー

1

を介して出力をロードすることでこれを行うことができますがadmin-ajax.php、それへのより良いアプローチは、SHORTINIT必要な機能だけをロードできるようにWordPress 定数を使用することですが、これを行うには検索してロードする必要があります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

あなたが必要としない../../wp-load.php、パスであるとして、与えられた関数は、あなたのためにそれを見つけるでしょう...しかし、私はあなたがファイルを何でも見つけて含める必要があります言ったようにあなたが例えば、それはあなたが使用している機能を持っている必要が。get_background_imageであるtheme.phpなど...あなたはCSSに追加して、あなたが効果的かつ確実にこの方法を使用するためにそれらを見つける方法を学ぶ必要がありますので、あなたはより多くの必要があるかもしれません。
majick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.