Вопрос или проблема
Я пытаюсь практиковаться в добавлении страницы параметров темы с использованием API настроек, но, к сожалению, код, который я написал в соответствии с кодексом, не работает правильно. Когда я тестировал код, ошибки не возникали, но опция pe_bannar_heading
не может быть сохранена. Можете ли вы помочь мне найти, в чем проблема в следующем коде?
<?php
/*
Название плагина: Тестовая страница параметров
Текстовый домен: test-option-page
*/
function reg_settings(){
register_setting('pe_theme_options','pe_theme_options');
add_settings_section('pe_main_settings','Основные параметры', '', __FILE__);
add_settings_field('pe_bannar_heading', 'Заголовок баннера:', 'pe_bannar_heading_setting', __FILE__, 'pe_main_settings');
}
add_action('admin_init','reg_settings');
function pe_bannar_heading_setting(){
$options = get_option('pe_theme_options');?>
<input name="pe_bannar_heading" type="text" value="<?php if(isset($options['pe_bannar_heading'])) echo $options['pe_bannar_heading'] ?>"/>
<?php }
function pe_add_menu_page(){
add_options_page('Параметры темы', 'Параметры темы', 'administrator', __FILE__ , 'display_options_page');
}
add_action('admin_menu','pe_add_menu_page');
function display_options_page(){
$options = get_option('pe_theme_options');?>
<div class="wrap">
<h2>Параметры жёлтого блога</h2>
<form action="options.php" method="post" enctype="multipart/form-data">
<?php
settings_fields('pe_theme_options');
do_settings_sections(__FILE__);
submit_button( 'Сохранить настройки' );
?>
</form>
</div>
<?php }
Для того чтобы отправленное значение сохранилось, вам нужно сохранить его в соответствующем массиве опций. Для этого вы можете добавить другую функцию (pe_save_settings()
в данном случае), чтобы обрабатывать отправку формы и сохранять содержимое поля. Вот полный рабочий код:
<?php
/*
Название плагина: Тестовая страница параметров
Текстовый домен: test-option-page
*/
function reg_settings(){
register_setting('pe_theme_options','pe_theme_options_item');
add_settings_section('pe_main_settings','Основные параметры', '', __FILE__);
add_settings_field('pe_bannar_heading', 'Заголовок баннера:', 'pe_bannar_heading_setting', __FILE__, 'pe_main_settings');
}
add_action('admin_init','reg_settings');
function pe_bannar_heading_setting() {
$options = get_option('pe_theme_options_array'); ?>
<input id="pe_theme_options_item" name="pe_theme_options_item" type="text" value="<?php if ( isset( $options['pe_bannar_heading'] ) ) { echo $options['pe_bannar_heading']; } ?>"/>
<?php
}
function pe_add_menu_page(){
add_options_page('Параметры темы', 'Параметры темы', 'administrator', __FILE__ , 'display_options_page');
}
add_action('admin_menu','pe_add_menu_page');
function display_options_page() {
$options = get_option('pe_theme_options_array');?>
<div class="wrap">
<h2>Параметры жёлтого блога</h2>
<form action="options.php" method="post" enctype="multipart/form-data">
<?php
settings_fields('pe_theme_options');
do_settings_sections(__FILE__);
submit_button( 'Сохранить настройки', 'primary', 'pe_new_option' );
?>
</form>
</div>
<?php }
add_action( 'admin_init', 'pe_save_settings' );
function pe_save_settings() {
if ( isset( $_POST['pe_new_option'] ) ) {
$new_value = trim( $_POST[ 'pe_theme_options_item'] );
$options_array = get_option('pe_theme_options_array');
$options_array['pe_bannar_heading'] = $new_value;
update_option( 'pe_theme_options_array', $options_array );
}
}
Ответ или решение
Проблема с сохранением параметров на странице настроек темы WordPress
В процессе разработки плагина для WordPress, который добавляет страницу настроек темы, вы столкнулись с проблемой: опция pe_bannar_heading
не сохраняется. Мы рассмотрим, как правильно реализовать эту функциональность и исправить приведенный код.
Анализ и решение
1. Регистрация настройки и полей:
Для начала необходимо убедиться, что вы правильно регистрируете настройки и поля. В вашем первоначальном коде возникло несоответствие в именовании. Вместо pe_theme_options
следует использовать уникальное имя для массива параметров:
register_setting('pe_theme_options_group', 'pe_theme_options');
Также следует убедиться, что в функции add_settings_field
указано правильное хранилище параметров:
add_settings_field('pe_bannar_heading', 'Bannar Heading:', 'pe_bannar_heading_setting', 'pe_theme_options_group', 'pe_main_settings');
2. Вывод поля ввода:
В функции pe_bannar_heading_setting
необходимо убедиться, что вы правильно выводите значение поля для сохранения:
$options = get_option('pe_theme_options');
?>
<input id="pe_bannar_heading" name="pe_theme_options[pe_bannar_heading]" type="text" value="<?php echo isset($options['pe_bannar_heading']) ? esc_attr($options['pe_bannar_heading']) : ''; ?>" />
<?php
Здесь вы используете esc_attr
для экранирования выходного значения, что увеличивает безопасность.
3. Обработка формирования страницы настроек:
В функции display_options_page
вы правильно вызываете settings_fields
и do_settings_sections
, однако важно указывать правильную группу настроек:
settings_fields('pe_theme_options_group');
do_settings_sections('pe_theme_options_group');
4. Сохранение данных и использование хуков:
Код для сохранения параметров можно исключить, так как функция register_setting
уже автоматически обрабатывает сохранение. Убедитесь, что вы передаете правильное имя для обновления опций:
add_action('admin_init', 'reg_settings');
Итоговый код:
Вот полный исправленный код для вашего плагина:
<?php
/*
Plugin Name: Test option page
Text Domain: test-option-page
*/
function reg_settings(){
register_setting('pe_theme_options_group', 'pe_theme_options');
add_settings_section('pe_main_settings','Main Settings', '', 'pe_theme_options_group');
add_settings_field('pe_bannar_heading', 'Bannar Heading:', 'pe_bannar_heading_setting', 'pe_theme_options_group', 'pe_main_settings');
}
add_action('admin_init','reg_settings');
function pe_bannar_heading_setting(){
$options = get_option('pe_theme_options');
?>
<input id="pe_bannar_heading" name="pe_theme_options[pe_bannar_heading]" type="text" value="<?php echo isset($options['pe_bannar_heading']) ? esc_attr($options['pe_bannar_heading']) : ''; ?>" />
<?php
}
function pe_add_menu_page(){
add_options_page('Theme Options', 'Theme Options', 'administrator', 'pe_theme_options_page', 'display_options_page');
}
add_action('admin_menu','pe_add_menu_page');
function display_options_page(){
?>
<div class="wrap">
<h2>Yellow Blog Options</h2>
<form action="options.php" method="post">
<?php
settings_fields('pe_theme_options_group');
do_settings_sections('pe_theme_options_group');
submit_button('Save Settings');
?>
</form>
</div>
<?php
}
Заключение
Следуя приведенным рекомендациям, вы сможете исправить проблему с сохранением опций на странице настроек вашей темы. Компетентное использование API настроек WordPress позволит вам эффективно управлять настройками и обеспечивать пользователям платформы удобный интерфейс. Знание правильной работы с формами и их обработкой в WordPress улучшит функциональность вашего плагина и обеспечит более надежное взаимодействие с данными.