• Решено slygol

    (@slygol)


    Пишу плагин 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' );
    
Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    1. action="" нужно заменить на action="options.php", иначе форма просто отправляется на ту же страницу и никакого сохранения не происходит.
    2. settings_fields("section_main") нужно заменить на settings_fields("paid-posts") — здесь должно быть то же значение, что указано первым параметром в register_setting().

    После этих правок, навеянных чтением статей «Settings API» и «settings_fields()», настройка сохраняется.

    Автор slygol

    (@slygol)

    OMG, спасибо!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «Не сохраняются настройки плагина» закрыта для новых ответов.