jiewmeng
  • 0
Учитель

Нужна помощь в понимании/кодировании с помощью API настроек

  • 0

Итак, я сделал что-то вроде ниже, но я получаю только (я ожидаю текстовое поле Facebook?)

Я надеюсь, что это не слишком грязно. Я новичок в API настроек…

add_action('admin_init', function() {
    register_setting('elem_opts', 'elem_opts', 'elem_validate_opts');
  add_settings_section('elem_opts_form', 'Elements Theme Options', 'elem_opts_form_cb', 'elems_opts');
  add_settings_field('elem_opts_form', 'Facebook', 'elem_opts_social_fb_cb', 'elems_opts', 'elem_opts_form');
});

function elem_opts_social_fb_cb() {
  $opts = get_option('elem_opts');
  if (empty($opts) || !is_array($opts)) {
    $opts = array();
  }
  ?>
  <input type="text" name="elem_opts[fb]" value="<?php echo $opts['fb'] ? $opts['fb'] : ''; ?>" />
  <?php
}

add_action('admin_menu', function() {
    add_theme_page('Elements Options', 'Elements Options', 'manage_options', 'elem_opts', 'elem_opts_cb');
});

function elem_validate_opts($input) {
  return $input;
}

function elem_opts_form() {
  ?>
  <p>Enable social network links, by entering your username for the respective social networks</p>
  <?php
}

function elem_opts_cb() {
    ?>
    <div class="wrap">
        <h2>Elements Theme Options</h2>

        <form action="options.php" method="post">
            <?php 
            settings_fields('elem_opts'); 
            do_settings_sections('elem_opts');
            ?>
            <input type="submit" name="Submit" value="Save changes" />
        </form>
    </div>
    <?php
}
Share
  1. У вас есть некоторые функции обратного вызова и перепутаны идентификаторы, попробуйте следующее:

    add_action('admin_init', function() {
        register_setting('elem_opts', 'elem_opts', 'elem_validate_opts');
        add_settings_section('elem_opts_form1', 'Elements Theme Options', 'elem_opts_form', 'elem_opts');
        add_settings_field('elem_opts_form', 'Facebook', 'elem_opts_social_fb_cb', 'elem_opts', 'elem_opts_form1');
    });
    
    function elem_opts_social_fb_cb() {
      $opts = get_option('elem_opts');
      if (empty($opts) || !is_array($opts)) {
        $opts = array();
      }
      ?>
      <input type="text" name="elem_opts[fb]" value="<?php echo $opts['fb'] ? $opts['fb'] : ''; ?>" />
      <?php
    }
    
    add_action('admin_menu', function() {
        add_theme_page('Elements Options', 'Elements Options', 'manage_options', 'elem_opts', 'elem_opts_cb');
    });
    
    function elem_validate_opts($input) {
      return $input;
    }
    
    function elem_opts_form() {
      ?>
      <p>Enable social network links, by entering your username for the respective social networks</p>
      <?php
    }
    
    function elem_opts_cb() {
        ?>
        <div class="wrap">
            <h2>Elements Theme Options</h2>
    
            <form action="options.php" method="post">
                <?php 
                settings_fields('elem_opts'); 
                do_settings_sections('elem_opts');
                ?>
                <input type="submit" name="Submit" value="Save changes" />
            </form>
        </div>
        <?php
    }
    

    которые дают мне это:

    введите описание изображения здесь

    и в следующий раз попробуйте использовать разные имена и идентификаторы для каждой функции, обратного вызова, раздела и слага страницы.

    • 0
  2. См. здесь для справки: Включение API настроек в темы WordPress. В частности, см. стр. 10.

    Ваша первая проблема, хотя я не знаю, приведет ли это к тому, что раздел/поле формы не будет выводиться, заключается в том, что вы передаете одну и ту же строку в качестве первого аргумента как для, так add_settings_section() и для add_settings_field() . Для add_settings_field() первого аргумента является идентификатор самого поля настроек, поэтому он, вероятно, не должен совпадать с первым переданным аргументом add_settings_section(), который является идентификатором раздела настроек.

    • 0

Оставить ответ

You must login to add an answer.