PHP-使用get_option将选项发送到style.PHP



我不知道如何表述这个问题,所以我开始说,在我的插件文件夹中,我有两个文件:

1-"index.php"

add_action( 'wp_enqueue_scripts', 'register_plugin_styles' );
function my_admin_setting() {
    include('includes/my_admin.php');
    include('css/wp-admin.php');
}
function custom_admin_actions() {
    add_menu_page("Customise-Admin", "Custom-Admin", 1, "Custom_Admin", "my_admin_setting");
    add_submenu_page('Custom_Admin', 'About', 'About', 1, 'info', "my_admin_info");
}
function my_admin_theme_style() {
    wp_register_style('my-admin-theme', plugins_url('css/wp-admin.php', __FILE__));
    wp_enqueue_style('my-admin-theme');
}

add_action('admin_enqueue_scripts', 'my_admin_theme_style');
add_action('login_enqueue_scripts', 'my_admin_theme_style');
add_action('admin_menu', 'custom_admin_actions');

add_option( 'my_adminbar_color', 'red' ); 

2-wp_admin.php(样式)

<?php header('Content-type: text/css');
?>
<?php 
$blue = '#0e70d1';
$dkgray = '#333';
$dkgreen = '#008400';
?>
<?php $myplugin_color = get_option( 'my_adminbar_color' ); ?>
#wpadminbar {
  background-color: <?php echo $myplugin_color;?> !important;
}

这里的问题是,我试图将一个选项传递给php样式。当我不插入"get_option"函数时,我的自定义样式是可见的,但是,一旦我传递了值,样式就不再呈现了。

我可以看到,当css代码在插件页面中打印出来时,这个选项被传递到了样式文件中,而不是在css似乎被格式化为普通文本时运行代码。

有人能解释一下为什么会发生这种事吗?如何将选项传递到我的样式文件?

您直接调用wp-admin.php文件,因此不会在该文件中加载Wordpress,也不会定义get_option

这可能是一个解决方案(不使用外部文件,如wp-admin.php):

function my_admin_theme_style () {
    $blue    = '#0e70d1';
    $dkgray  = '#333';
    $dkgreen = '#008400';
    $myplugin_color = get_option( 'my_adminbar_color', 'red' );
    return "
        body {
            background-color: $myplugin_color !important;
        }
    ";
}
function add_my_style_to_admin () {
    wp_add_inline_style( 'wp-admin', my_admin_theme_style() );
}
function add_my_style_to_login () {
    echo '<style type="text/css">';
    echo my_admin_theme_style();
    echo '</style>';
}
add_action('admin_enqueue_scripts', 'add_my_style_to_admin');
add_action('login_enqueue_scripts', 'add_my_style_to_login');

我必须制作两个函数,因为admin_enqueue_scriptslogin_enqueue_scripts的工作方式不同。

我对wordpress的细节不是很熟悉,但如果你想应用

#wpadminbar {
  background-color: <?php echo $myplugin_color;?> !important;
}

作为一种样式,您需要将其包装在<style>标记中。所以它将是

<?php header('Content-type: text/css');
?>
<?php 
$blue = '#0e70d1';
$dkgray = '#333';
$dkgreen = '#008400';
?>
<?php $myplugin_color = get_option( 'my_adminbar_color' ); ?>
<style>
#wpadminbar {
  background-color: <?php echo $myplugin_color;?> !important;
}
</style>

对此不是100%有信心,但这是我最好的猜测。

最新更新