インラインスタイルを使用せずにプラグインにCSSオプションを追加するにはどうすればよいですか?


26

最近、ショートコードを使用してjQueryスライダーを任意の投稿またはページに追加するプラグイン、WP Coda Sliderをリリースしました。次のバージョンでオプションページを追加します。CSSオプションをいくつか追加したいのですが、プラグインがスタイルの選択肢をインラインCSSとして追加したくありません。呼び出されたときにCSSファイルに動的に選択肢が追加されるようにします。

また、セキュリティの問題のためにfopenを使用したり、ファイルに書き込んだりすることも避けたいと思います。

このようなことは簡単に実現できますか、それともスタイルの選択をページに直接追加した方が良いでしょうか?


@Chris_O:私はほぼ同じことを考えていました。私が望んでいるのは、ファイル名の代わりに関数名で呼び出してwp_enqueue_style()(および wp_enqueue_script())、私の関数にCSS(またはJS)を生成させる方法ですが、それでもリンクされたスタイルシートを介して最終的に含めます。私の知る限り、これはwp_equeue_*()関数では不可能です。おそらく、tracチケットを送信する必要がありますか?
MikeSchinkel

@MikeSchinkel:これはwp_enqueue関数を使用する非常に論理的な方法です。そのチケットにサポートを追加します。
Chris_O

@Chris_O:@Dougの答えを見ました。私はあなたがすでにそれを知っているという悪い仮定をしました。私があなたをここに指摘した場合ではないことに気づいたなら:wordpress.stackexchange.com/questions/556/#562
MikeSchinkel

@MikeSchinkel wp_registerとwp_enqueueについて知っていました。プラグインオプションページの値に基づいてスタイルシートを作成する方法を探していました。
Chris_O

@Chris_O:ああ。私は、自分が解決策を学んだ後でも、他の人が解決策に欠けているものを見ることができる人であると考えるのが好きです(つまり、ほとんどの専門家は良い教師ではなく、私は最高の専門家ではありませんが、私は一般的に良い教師です) )OHOH、これは私が見逃したものです、ごめんなさい。:)
MikeSchinkel

回答:


27

wp_register_stylewp_enqueue_styleを使用してスタイルシートを追加します。にスタイルシートのリンクを単に追加しないでくださいwp_head。キューイングスタイルを使用すると、必要に応じて他のプラグインまたはテーマでスタイルシートを変更できます。

スタイルシートは.phpファイルにすることができます:

wp_register_style('myStyleSheet', 'my-stylesheet.php');
wp_enqueue_style( 'myStyleSheet');

my-stylesheet.phpは次のようになります。

<?php
// We'll be outputting CSS
header('Content-type: text/css');

include('my-plugin-data.php');    
?>

body {
  background: <?php echo $my_background_variable; ?>;
  font-size: <?php echo $my_font_size; ?>;
}

3
さらに、オプションページの値が変更されたときにのみ値が変更されるため、保存時にCSSファイルを生成できます。CSSファイルをプラグインディレクトリにも保存できるため、includesなどを使用して各CSSリクエストでPHPファイルを実行するよりもパフォーマンスが向上します。
-hakre

1
ありがとう!うまくいきました。しかし、致命的なエラーget_option()...が定義されていません。次に、wp-config.phpファイルをロードし、問題を修正しました。
スミスハルシャン14年

Sumith、カスタムCSSファイル内でget_optionをどのように使用したか説明できますか?どうもありがとう!
アントニオペトリカ

10

CSSファイルを動的に構築してからロードすると、特にWPを介して処理される変数がCSSにある場合、CSSファイルを追加する帯域幅が非常に低くなるため、パフォーマンスに大きな負荷がかかります。1ページの読み込みで2つの異なるファイルが作成されるため、WPは2回起動し、すべてのDBクエリを2回実行します。これは非常に面倒です。

スライダーを1ページのみに配置し、スタイルを動的に設定する場合は、ヘッダーにスタイルブロックを追加することをお勧めします。

パフォーマンスの順:

  1. 動的に作成されたヘッダーにスタイルの小さなブロックを追加-非常に高速
  2. wp_enqueue_style経由で非動的スタイルシートを追加-中
  3. wp_enqueue_styleを使用して動的スタイルシートを追加する-非常に遅い

@ダンゲイル非常に良い点。プラグインは複数のページで使用でき、一部のユーザーは2ページまたは3ページで使用しています。ショートコードを持つページの現在の静的スタイルシートとjsのみをキューに登録します。
-Chris_O

あなたが私の答えに賛成票を投じたとしても、私はダン・ゲイルに同意します。小さなCSSブロックをwp_headに追加すると、ページビューごとに個別のスタイルシートをダウンロードするよりもパフォーマンスが向上します(ショートコードのある少数の投稿/ページに制限されている場合でも)。そもそも別個のスタイルシートを使用する唯一の理由は、ブラウザキャッシュできることです。動的スタイルシートはキャッシュできません。
ダグ

2
これはまだ物事を進める正しい方法ですか?
Daveはキス

2

これは私が通常行う方法です:

function build_stylesheet_url() {
    echo '<link rel="stylesheet" href="' . $url . 'stylesheetname.css?build=' . date( "Ymd", strtotime( '-24 days' ) ) . '" type="text/css" media="screen" />';
}

function build_stylesheet_content() {
    if( isset( $_GET['build'] ) && addslashes( $_GET['build'] ) == date( "Ymd", strtotime( '-24 days' ) ) ) {
        header("Content-type: text/css");
        echo "/* Something */";
        define( 'DONOTCACHEPAGE', 1 ); // don't let wp-super-cache cache this page.
        die();
    }
}

add_action( 'init', 'build_stylesheet_content' );
add_action( 'wp_head', 'build_stylesheet_url' );

1

私はこの同類のすべての推奨事項に苦労しました-多分私は少し太っているかもしれないし、あるいは貢献者が共通の感触を失ったかもしれません。

プラグインphpファイルでこれをコーディングすることに決めました:

echo "<link href='http://www.brittany-gite-holidays.co.uk/wp-content/plugins/flexavailability/css/css.css' type='text/css' rel='stylesheet' />";
echo "<link href='http://www.brittany-gite-holidays.co.uk/wp-content/plugins/flexavailability/css/public.css' rel='stylesheet' type='text/css'/>";

うまくいくようです。プラグインを使用するページでのみロードされます。h1タグの後にロードしますが、これは私には問題ありません。私はそれがより効率的であるか、より明確であることができるかわかりません。

....しかし、おそらく私は間違っています-私は少し太かったと言いました。


あなただけロードする必要があります<link>ページの先頭に要素を
シア

ヤース。それは、CSSがページの上部から下に向かってすべてに影響を与えたいためです。h1タグの後に来るものだけに影響を与えてうれしいです。どのサンプルも機能させることができませんでした(説明が間違っている可能性があると思います)。私が間違っているなら教えてください:)
chazza

@chazzaそれが唯一の理由ではありません。bodyタグが書き込まれた後、ブラウザがスタイルを検出すると、そのスタイルが読み込まれて適用されるまで、ブラウザはそれ以外の処理を停止します。これはパフォーマンスに悪影響を与え、スタイルが設定されていないテキストの画面リフローとフラッシュにつながります。ただし、実際に問題にならない場合は、あなたが言ったようにそれらのcssファイルを投入してください。私はいつもそれをします、そして、一日の終わりにそれは大丈夫です。最適ではありませんが、問題ありません。
ダンゲイル

0

Wordpress 3.3以降の更新

テーマ/プラグインオプションに基づいてスタイルを動的に追加するために使用できるwp_add_inline_styleという関数があります。これを使用して、高速で効率的な小さなcssファイルをヘッドに追加できます。

<?php
function myprefix_scripts() {

    wp_enqueue_style('name-of-style-css', plugin_dir_path(__FILE__) . '/css/ccsfilename.css');

    $css = get_option( 'loader_css', 'default css goes here for when there is no value' );

    //or for Example
    $color = get_option( 'custom_plugin_color', 'red' ); //red is default value if value is not set
    $css = ".mycolor{
                background: {$color};
           }";

    wp_add_inline_style('name-of-style-css', $css);

}

add_action( 'wp_enqueue_scripts', 'myprefix_scripts' );
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.