Я не уверен, как сформулировать вопрос, поэтому я начинаю говорить, что в папке моего плагина у меня есть 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 кажется, что он отформатирован как обычный текст.
Может ли кто-нибудь объяснить мне, почему это происходит? И как я могу передать опцию в мой файл стиля?
Вы вызываете файл wp-admin.php напрямую, поэтому WordPress не загружается внутри этого файла, и get_option
не определено.
Это может быть решением (без использования внешнего файла, такого как сор-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_scripts
а также login_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%, но это мое лучшее предположение.