SLY_G
@SLY_G
журналист, переводчик, программист, стартапщик

Как исправить плагин для Wordpress, чтобы настройки сохранялись?

Пишу плагин Paid Post. Сделал для него пробную страницу настроек (она пока там одна). Выводится страница нормально, но при нажатии «сохранить» настройка не изменяется (галочка всегда включена). Чтение Settings API и изучение чужих плагинов не помогли.

Кусок кода:

// Admin options

function PPOptionsPage() {
  add_settings_section("section_main", __("Main options", 'paid-posts'), '', "paid-posts");

  add_settings_field(
    "pp_display_excerpt",
    __("Display post excerpt on a single page before paywall text", 'paid-posts' ),
    "PPCheckbox",
    "paid-posts",
    "section_main",
    array( 'label_for' => 'pp_display_excerpt')
  );
  register_setting("paid-posts", "pp_display_excerpt");
}

function PPCheckbox($options)
{
  echo '<input type="checkbox" class="code" name="'. $options['label_for'] .'" id="'. $options['label_for'] .'" value="1"' . checked(1, get_option($options['label_for']), false) . '>';
}

add_action("admin_init", "PPOptionsPage");

function PPAdminMenu() {
  add_options_page( 
    __('Paid Post options', 'paid-posts'),
    __('Paid Post', 'paid-posts'),
    'manage_options',
    'paid-posts',
    'PPAdminOptions'
  );
}

function PPAdminOptions() {
  if ( !current_user_can( 'manage_options' ) )  {
    wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
  }
  ?>
      <div class="wrap">
         <h1><?php echo get_admin_page_title(); ?></h1>
 
         <form method="post" action="">
            <?php
               settings_fields("section_main");
 
               do_settings_sections("paid-posts");
                 
               submit_button();
            ?>
         </form>
      </div>
   <?php
}

add_action( 'admin_menu', 'PPAdminMenu' );
  • Вопрос задан
  • 26 просмотров
Решения вопроса 1
SLY_G
@SLY_G Автор вопроса
журналист, переводчик, программист, стартапщик
Правильный ответ:
action="" нужно заменить на action="options.php", иначе форма просто отправляется на ту же страницу и никакого сохранения не происходит.

settings_fields("section_main") нужно заменить на settings_fields("paid-posts") — здесь должно быть то же значение, что указано первым параметром в register_setting().
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
san_jorich
@san_jorich
Творческий кодер
register_setting. Почитайте про него
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы