Как сохранить данные с произвольного поля в настройках и позже вывести данные на сайте?

Ссылка скопирована
PHP
1 ответ

Создал меню в настройках админки и добавил туда свое поле ввода.
Как сохранить информацию которую вводят в это поле и после ее вывести на сайте?

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 пишите ярлык вашего поля

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Для сохранения своего поля на странице настроек 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'              =&gt; 'string',
        'sanitize_callback' =&gt; 'sanitize_text_field',
        'default'           =&gt; '',
    ]);
});
 
function my_custom_submenu_page_callback() {
    ?&gt;
    &lt;div class="wrap"&gt;
        &lt;h1&gt;Site Options&lt;/h1&gt;
        &lt;form method="post" action="options.php"&gt;
            &lt;?php settings_fields('site_options_group'); ?&gt;
            &lt;p&gt;
                &lt;label&gt;Copyright&lt;/label&gt;&lt;br&gt;
                &lt;input type="text" name="site_copyright"
                       value="&lt;?php echo esc_attr(get_option('site_copyright')); ?&gt;"&gt;
            &lt;/p&gt;
            &lt;?php submit_button(); ?&gt;
        &lt;/form&gt;
    &lt;/div&gt;
    &lt;?php
}

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' =&gt; 'string', 'sanitize_callback' =&gt; 'sanitize_text_field', 'default' =&gt; '', ]); }); function my_custom_submenu_page_callback() { ?&gt; &lt;div class="wrap"&gt; &lt;h1&gt;Site Options&lt;/h1&gt; &lt;form method="post" action="options.php"&gt; &lt;?php settings_fields('site_options_group'); ?&gt; &lt;p&gt; &lt;label&gt;Copyright&lt;/label&gt;&lt;br&gt; &lt;input type="text" name="site_copyright" value="&lt;?php echo esc_attr(get_option('site_copyright')); ?&gt;"&gt; &lt;/p&gt; &lt;?php submit_button(); ?&gt; &lt;/form&gt; &lt;/div&gt; &lt;?php }

Вывод на сайте:

echo esc_html(get_option('site_copyright'));

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.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно