Как сохранить данные с произвольного поля в настройках и позже вывести данные на сайте?
Создал меню в настройках админки и добавил туда свое поле ввода.
Как сохранить информацию которую вводят в это поле и после ее вывести на сайте?
add_action('admin_menu', 'site_options'); function site_options(){ add_submenu_page( 'options-general.php', 'Site Options', 'Site Options', 'manage_options', 'site_options', // slug 'my_custom_submenu_page_callback' ); } function my_custom_submenu_page_callback(){ ?> <p>Copyright <input type="text" ></input> </p> <?php } |
add_action('admin_menu', 'site_options'); function site_options(){ add_submenu_page( 'options-general.php', 'Site Options', 'Site Options', 'manage_options', 'site_options', // slug 'my_custom_submenu_page_callback' ); } function my_custom_submenu_page_callback(){ ?> <p>Copyright <input type="text" ></input> </p> <?php }
Дополнительно:
Решил эту проблему с помощью ACF
Нужно написать эту функцию для добавления страницы в functions.php
if (function_exists("acf_add_options_page")) { acf_add_options_page(array( "page_title" => "Options", "menu_title" => "Options", "menu_slug" => "theme_settings", )); } |
if (function_exists("acf_add_options_page")) { acf_add_options_page(array( "page_title" => "Options", "menu_title" => "Options", "menu_slug" => "theme_settings", )); }
И после в группах полей добавил новую группу с условием отображения (Страница с опциями равно "Options")
Вывод с помощью
<?php the_field("copyright", "option"); ?>
Вместо copyright пишите ярлык вашего поля
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для сохранения своего поля на странице настроек WordPress лучше использовать Settings API. Он сам обрабатывает регистрацию option, nonce и сохранение через стандартную страницу
options.php. В Вашем примере поле выводится, но у него нетname, нет формы, нет регистрации настройки и нет обработчика сохранения.Минимальный рабочий вариант:
add_action('admin_menu', function () { add_submenu_page( 'options-general.php', 'Site Options', 'Site Options', 'manage_options', 'site_options', 'my_custom_submenu_page_callback' ); }); add_action('admin_init', function () { register_setting('site_options_group', 'site_copyright', [ 'type' => 'string', 'sanitize_callback' => 'sanitize_text_field', 'default' => '', ]); }); function my_custom_submenu_page_callback() { ?> <div class="wrap"> <h1>Site Options</h1> <form method="post" action="options.php"> <?php settings_fields('site_options_group'); ?> <p> <label>Copyright</label><br> <input type="text" name="site_copyright" value="<?php echo esc_attr(get_option('site_copyright')); ?>"> </p> <?php submit_button(); ?> </form> </div> <?php }
Вывод на сайте:
echo esc_html(get_option('site_copyright'));
ACF Options Page тоже нормальное решение, если ACF уже используется. Но если нужно одно-два поля без зависимости от ACF, Settings API легче и надёжнее.
Если поле должно содержать HTML, не используйте
sanitize_text_field, иначе теги будут очищены. Для ограниченного HTML применяйтеwp_kses_post, а для URL —esc_url_rawпри сохранении иesc_urlпри выводе. Тип sanitization должен соответствовать типу данных.ACF Options Page удобен тем, что даёт визуальные поля, повторители и загрузку изображений без ручного Settings API. Но если это публичный плагин или небольшая настройка темы, лучше не создавать зависимость от ACF ради одного copyright-поля.
После сохранения проверьте значение напрямую:
get_option('site_copyright'). Если оно пустое, значит не совпадает имя option, group вsettings_fields()или у input отсутствует правильныйname.