【问题标题】:PHP - Send option to style.php using get_optionPHP - 使用 get_option 将选项发送到 style.php
【发布时间】:2015-06-05 10:40:37
【问题描述】:

我不确定如何提出这个问题,所以我开始说在我的插件文件夹中我有 2 个文件:

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 那样运行代码,它似乎被格式化为普通文本。

有人可以向我解释为什么会发生这种情况吗?我怎样才能将选项传递给我的样式文件?

【问题讨论】:

  • get_option 如果未设置该值,则返回 false。您可以添加一个默认值,例如get_option( 'my_adminbar_color', '#ABCDEF' )
  • 但是我已经在索引页设置了 add_option( 'my_adminbar_color', 'red' );我可以看到红色值正在输出,但样式停止工作。一旦我删除 get_option 函数,样式就会再次起作用。
  • 哦,好的,您直接调用 wp-admin.php 文件,因此该文件中没有加载 Wordpress,并且没有定义 get_option。我会尝试给出解决方案。
  • 非常感谢 d79。当我不直接调用 wp-admin.php 并从 wp-admin.php 中删除 get_option 时,该样式再次起作用。

标签: php css wordpress options


【解决方案1】:

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

#wpadminbar {

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

作为一种样式,您需要将其包装在&lt;style&gt; 标签中。所以会是

<?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% 有信心,但这是我的最佳猜测。

【讨论】:

  • 我已经试过了,它可以工作,但是样式只在插件页面上呈现,而不是在所有仪表板中。无论如何,感谢您的快速响应
【解决方案2】:

您是直接调用 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');

我必须创建 2 个函数,因为 admin_enqueue_scriptslogin_enqueue_scripts 以不同的方式工作。

【讨论】:

  • 谢谢,这正在工作。现在我有一个问题,当我提交我的选项值以进行更新时,它可以工作,但是,我必须提交两次才能呈现设置。请参阅您的答案中的编辑。
  • 我认为我们不应该用另一个问题来编辑这个问题。但是我认为问题在于您在加载样式后设置新颜色。您应该在调用之前或在my_admin_theme_style 函数内部调用update_option
  • 好的,非常感谢您的帮助,对编辑表示抱歉。我会尽量听从你的建议
  • 没问题,很高兴它有帮助。希望你弄清楚,否则可能会添加另一个问题。
猜你喜欢
  • 2019-10-08
  • 2016-07-18
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2012-06-12
  • 1970-01-01
相关资源
最近更新 更多