私はこれを理解しようとして文字通り私の髪を引き抜いています。私はもう12時間近くそこにいました。
PHPとテーマ開発に不慣れなので、PHPスタイルシートを作成するときにtheme_options('value');
を表示させる方法を理解するのに苦労しています。
私はparse_requestメソッドを使ってここで 読んだ ブログ記事から例を取りました。
header.php
のコード
<link rel='stylesheet' type='text/css' href="<?php echo get_template_directory() ?>/css/theme_styles.php?my-custom-content=css" />
そしてtheme-styles.php
に
<?php
add_action( 'parse_request', 'my_custom_wp_request' );
function my_custom_wp_request( $wp ) {
if ( !empty( $_GET['my-custom-content'] ) && $_GET['my-custom-content'] == 'css' ) {
# get theme options
header( 'Content-Type: text/css' );
?>
a { color: <?php echo get_option('some_other_option') ?> !important; }
<?php
exit;
}
}
?>
それがポストの中でやらなければならないことはそれだけですので、今私は道に迷っています。私はまたうまくいかなかった他の多くの解決策を試してみました。任意の助けは大歓迎です!
@ Jevuskaは私の問題を解決しましたが、私は私のテーマオプションページから動的CSSを追加するためのもっと簡単な解決策を見つけました。さあ!
これをfunctions.phpに追加してください。
add_action('wp_head', 'my_custom_css');
function my_custom_css(){
require_once( get_template_directory() . '/css/theme-styles.php' );
}
これで、theme-styles.phpを通常のCSSスタイルシートとして扱うことができます
<style type="text/css">
a {
color: <?php echo get_option('some_other_option');?> !important;
}
</style>
完了しました。それはとても簡単でした。
@ Scott Reinmuth、私はあなたがそれらのチュートリアルについて誤った指示だと思います、そうあなたは parse_request
メソッドを使います。
あなたが従うならば、このコードはfunctionのフックです、そして、あなたはfunctions.phpを入れる必要があります
<?php
add_action( 'parse_request', 'my_custom_wp_request' );
function my_custom_wp_request( $wp ) {
if ( !empty( $_GET['my-custom-content'] ) && $_GET['my-custom-content'] == 'css' ) {
# get theme options
header( 'Content-Type: text/css' );
?>
a {color: <?php echo get_option('some_other_option'); ?> !important;}
<?php
exit;
}
}
?>
そして、header.phpの中で(file/ css/theme_styles.phpなしで)パラメータmy-custom-content
とリクエストをする値css
。それを機能させるために機能を備えたフックが必要な理由.
<link rel='stylesheet' type='text/css' href="<?php bloginfo( 'url' ); ?>/?my-custom-content=css" />
ここでやった。
ただし、外部関数でcssを使用する必要がある場合は、custom-css.phpを作成します。そしてfunctions.phpの中のあなたの関数はこのようになるでしょう:
add_action( 'parse_request', 'my_custom_wp_request' );
function my_custom_wp_request( $wp ) {
if ( !empty( $_GET['my-custom-content'] ) && $_GET['my-custom-content'] == 'css' ) {
# get theme options
header( 'Content-Type: text/css' );
require dirname( __FILE__ ) . '/css/custom-css.php';
exit;
}
}
そしてあなたのcustom-css.phpの中
a {
color: <?php echo get_option('some_other_option'); ?> !important;
}
header.phpでは、上記と同じです。
検証データと私の同じようなアプローチ。このコードを追加するには、ファイルfunctions.php
テーマを使用するだけです。
/** Enqueue style for custom css
* we use parameter wpse_css and ( int ) 1 as value
*
*/
add_action( 'wp_enqueue_scripts', 'wpse221867_enqueue_style', 99 );
function wpse221867_enqueue_style()
{
/** check url ssl */
$url = ( is_ssl() ) ?
home_url( '/', 'https' ) : home_url( '/' );
/** Register and enqueue wpse_style_php
* Build query with wpse_css as parameter, 1 as number to validation
*
*/
wp_register_style( 'wpse_style_php',
add_query_arg( array(
'wpse_css' => ( int ) 1
), $url ),
array(), //your style handled
null, //remove wp version
'all' //media
);
wp_enqueue_style( 'wpse_style_php' );
}
/** Fire parse_request with function wpse221867_print_css
* Generate css in PHP
*
* @return string CSS Content
*/
add_action( 'parse_request', 'wpse221867_print_css' );
function wpse221867_print_css()
{
/** validate query on input */
$css = filter_input( INPUT_GET, 'wpse_css', FILTER_VALIDATE_INT );
if ( ! $css || ( int ) 1 != $css )
return;
ob_start();
header( 'Content-type: text/css' );
/** wpse_option_settings contain css in an array i.e
* array( 'wpse_css_content' => 'a{color:#ececec}' )
*
*/
$options = get_option( 'wpse_option_settings' );
$raw_css = ( isset( $options['wpse_css_content'] ) )
? $options['wpse_css_content'] : '';
/** sanitize for output */
$content = wp_kses( $raw_css,
array( '\'', '\"' )
);
$content = str_replace( '>', '>', $content );
echo $content; // output
die();
}
私見、この方法は、特にパフォーマンスの問題のためにお勧めできません。静的CSSファイルを使用して、それをあなたのCSSをカスタマイズ可能にするための別の方法を見つけてください。
wp_add_inline_style
(利用可能な例)およびget_theme_mod
。