web-dev-qa-db-ja.com

テーマカスタマイザ - 動的CSS PHP ファイル

私は最近、カスタムクラスを使用してテーマオプションパネルを有効にすることから、Wordpressの組み込みテーマカスタマイザに切り替えました。

ライブプレビューは正常に動作していますが、専用のPHPファイル内の値を取得するために 'get_theme_mod()'を使用することに少しこだわっています。

私の古いクラスを使用して、オプションなどを取得するためにさまざまな関数を使用できるようにするために 'wp-load.php'を含める 'dynamic.css.php'をエンキューすることができました。 wp_headテーマのカスタム関数。必要でない限り、私は本当にこれをやりたくありません。

だから、私は現在私の 'dynamic.css.php'ファイルをenueueしていて、それはこのように見えます:

<?php

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

define( 'WP_USE_THEMES', false );
include('../../../../../wp-load.php'); ?>

@media all and (max-width: <?php echo get_theme_mod('nav-primary-breakpoint'); ?>) {

    .drawer {
        margin-top: 42px;
        padding-top: 42px;
        top: -42px;
    }

}

これは私が以前に行った方法ですので、私は基本的に同じことを試みましたが、get_theme_mod()はまったく機能しません。

私はまたwp-load.phpをインクルードすることにも用心深い - 私は実際にそれをインクルードする必要なしに以前と同様の方法論を使うことを望んでいた。

だから私の目的は:

  • wp-load.phpをロードする必要がないようにする
  • 私のCSSを別のファイルに入れてください
  • cSSが自分のテーマヘッダを出力しないようにする

私はまたwp-load.phpインポートを削除して私のテーマの先頭にファイルを含めようとしましたが、これは出力をbodyタグに入れます。

ここに私の目的を達成する上で何か提案はありますか?

2
0Neji

@s_ha_dumは正しいです、 ajaxプラグインapi は進むべき道です。私は少し前に生成していた動的なjsファイルを使って自分自身でこの問題に遭遇しました。

基本的には、次のようにスタイルをエンキューします。

wp_enqueue_style('dynamic-css',
             admin_url('admin-ajax.php').'?action=dynamic_css',
             $deps,
             $ver,
             $media);

それから、動的なCSSファイルをロードする関数を作成します。

function dynaminc_css() {
       require(get_template_directory().'/css/dynamic.css.php');
       exit;
}

そしてajaxのアクションを追加します。

add_action('wp_ajax_dynamic_css', 'dynaminc_css');
add_action('wp_ajax_nopriv_dynamic_css', 'dynaminc_css');

ここでwp_ajax_*は名前付き関数を起動し、すべての基本的なwp関数へのアクセス権を持ちます。 end wp_ajax_nopriv_* ログインしていない訪問者を実行します

add_action('wp_ajax_custom_function', 'custom_function')がプラグインの中にあれば、プラグインのベースアクティベーションファイルの中になければならないことに気づいたことに注意してください。そうでなければ無視されます。それについての簡潔なメモが action reference doc にあります。 編集:私はちょうどこれをもう一度テストし、それを繰り返すことはできません。どうやらそのような制限はありません。

この説明は、このコーデックスフォーラム投稿の拡張版です。 http://Wordpress.org/support/topic/best-way-to-create-a-css-file-dynamically#post-4857705

8
orionrush