サポート » 使い方全般 » テーマのオプションと連動した動的なcssの生成について

  • 解決済 formless

    (@formless)


    皆さま、いつもお世話になっております。

    只今、カスタマイズ可能なテーマの作成に取り組んでおり、その中で分からない事が発生してしまいましたので、相談させて下さい。

    今のところ、テーマにデザインオプションメニューを追加して、そこで選択した色やスタイルや数値によって、オプション項目毎に追加のcssファイルを読み込ませるようにしています。
    (※初期値は全てstyle.cssに記述済み。ユーザー値はDBに格納しget_optionで取り出し。)
    たとえば、ヘッダの文字を黒に指定した場合には、追加の”head_text_black.css”というcssファイルをヘッダにlinkタグを追加することによって読み込ませています。
    (実際のコード:<link rel=”stylesheet” type=”text/css” href=”<?php echo get_bloginfo(‘template_directory’); ?>/optionalcss/<?php echo get_option(‘head_text_color’); ?>.css” />

    今、このようなカスタマイズ項目が現在3つ(ヘッダのテキスト色、位置、ヘッダ自体の高さ)あり、これを、ヘッダ以外のパーツに拡大し、20項目近く迄増やしたいと思っていますが、現状、カスタマイズ項目数だけ追加cssを読み込むことになるという非常に稚拙な仕様ですので、表示速度の低下が懸念されます。
    また、現在ヘッダ自体の高さの指定も、20px刻みで5つの数値から選択させて、それぞれの選択肢用のcssをあらかじめ用意して、そこから1つ読み込んでいます。
    (例:100pxを指定したら、”headheight_100px.css”を読み込むようにさせる。)
    が、しかし、これも本来はユーザーが自由に数値指定出来るようにあるべきと思っています。

    そこで、動的にphpでcssを吐き出す”themeoptioncss.php”のようなものを作ってみたのですが、”undefined function get_option()” となり、get_option()を使えるようにする為にもろもろのコアファイルをrequireしないといけないのだろうな…でも、そうする事自体も表示速度的かつサーバへの負荷的にいかがなものだろう…と立ち止まりました。

    styleタグで直接ヘッダ内にカスタマイズ分のcssを動的に書き出す事も検討しましたが、htmlのサイズがかなり大きくなるのと、ページ遷移時は実質的にカスタマイズ分cssの再読み込みとなるので避けたいと思っています。
    また、ユーザーが設定をupdateする度に、ファイルとして”themeoption.css”を書き出して読み込む事も考えましたが、これもスマートでない気がしました。

    そこで、ご相談ですが、テーマのオプションと連動した動的なcssを生成する為に、表示速度的にも技術的にも最もスマートな方法のヒントを頂戴出来ればと思っております。

    もしくは、themeoptioncss.php内でget_option()を使えるようにする為の必要最低限のコアの呼び出し方法を教えていただければと思っています。それが、あまりサーバの負荷にならないということであれば、その方法をとりたいと思います。

    文章的、技術的に稚拙な内容で大変恐縮ですが、何かヒントもしくはアドバイスを頂戴出来れば幸いです。

    皆さま、どうぞ宜しくお願い致します。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック投稿者 formless

    (@formless)

    追記です。

    (前言撤回のようでなんなのですが)
    設定値をupdateする毎にcssファイル書き出しする方法も試みましたが、テーマのfunctions.php内ではファイルの書き込みは出来ないようになっているのですね?
    file_put_contentsを使うと”HTTP wrapper does not support writeable connections …”と出ました。これは簡単に回避(書き込み可能に)出来るのでしょうか?
    (ファイルを書き出すようなテーマが見当たらないので参考になるコードも無く…)

    WordPressのコアをキチンと理解していない私には、ヘッダ内にstyeタグでcssを直接書き込む方法以外は、まだハードルが高すぎる気がしてきました…

    モデレーター jim912

    (@jim912)

    formlessさん、こんにちは。

    動的にphpでcssを吐き出す

    require_once で wp-load.php を読み込むようにすると、必要な関数は使えるようになるはずです。

    file_put_contentsを使うと”HTTP wrapper does not support writeable connections …”と出ました。これは簡単に回避(書き込み可能に)出来るのでしょうか?

    パスが、URL形式になっていませんか?
    内部パス形式で指定していただければ、書き込みできると思います。それと、この方法の場合はファイルの書き込み権限の確認とその結果への対応が必要です。
    また、file_put_contents はphp5からの関数ですので、php4に対応させるためには、書き替えるか、file_put_contentsのマニュアルページのサンプルみたいに、関数未定義の場合は自分で定義する必要があります。

    トピック投稿者 formless

    (@formless)

    jim912さま

    お返事、どうも有り難うございます。
    ご指導の通りにしました所、2点ともあっさりと解決しました。
    本当にどうも有り難うございます!
    特に後者はボンミスだったので、お恥ずかしい限りです。。。

    色々考えた末、管理系よりも公開系が軽くあるべきという事で、
    設定値をupdateする度に、cssファイルを書き出す仕様に変更しました。

    もしも皆さまに公開出来るようなものが完成した暁には、
    こちらで発表させていただきたいと思います。

    今後ともどうぞ宜しく御願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「テーマのオプションと連動した動的なcssの生成について」には新たに返信することはできません。