2

我正在尝试为 wordpress 插件构建一个设置表单。我不知道具体有多少选项,所以它必须是具有动态结构的形式。对于构建选项表单,我使用设置 API ,但找不到创建动态字段的方法。

我有带有默认选项的数组:

 function filtered_install(){
    //defaults options
        $array= Array
    (
        '0' => 1,
        '1' => 1,
        '2' => 3
    );
        add_option('snso_fields_array',$array);
    }

添加设置页面:

# Register a new page in the "Settings" tab:
function filtered_add_admin_pages() {
    $page = add_options_page(
        'Setting search.',                                    // - page title administration
        'Search with filters',                                 // - the name of the menu item
        'manage_options',                                     // - the right of access to editing
        'filteder_search.php',                                // - slug
        'filtered_options_page'                               // - callback.
    );


}

添加表格:

function filtered_options_page() 
{
    echo '<div class="wrap">';
    screen_icon();                                          // - icon.
    echo '<form method="post" action="options.php">';       // - processing of the request.
    do_settings_sections('snso_page');                      // - output section.
    settings_fields('snso_fields');                         // - output fields belonging to the same group.
    echo '<a href=\'#\' id=\'add\'>Add new field</a>';      // - button that add more fields.
    submit_button();                                        // - submit button.
    echo '</form>';
    echo '</div>';
}

从数组数据中获取表单中的可重复字段:

# Register the field in the database and make out their display.
function filtered_options_fields(){


    register_setting('snso_fields', 'snso_fields_array'); // - register field in the database.

    add_settings_section(
        'snso_section_array',                                 // - section id.
        '',
        'snso_section_array_callback',                        
        'snso_page'                                           // - options page.
    );



    $options = get_option('snso_fields_array');

    foreach($options as $key=>$field) {
       //id, title (label), callback, page, section(from add_settings_section), args
       add_settings_field(
        "option_$key",
        "Field # $key",
        "business_setting",
        "snso_page",
        "snso_section_array",
        $key);
    }

    function business_setting($key) {
      $options = get_option('snso_fields_array');
      echo "<input name='snso_fields_array[$key]' id='option_$key' type='text' value='" . $options[$key] . "' />";
    }



}


# An array of fields with the saved settings:
function snso_section_array_callback() {
  echo '<p>The fields listed below are stored in one cell array table <code>wp_options</code>.</p>';
  echo '<pre><code>'; print_r(get_option('snso_fields_array')); echo '</code></pre>';
 }

比我单击添加 ID 为“添加”的新字段链接时,我需要在数据库中更新选项“snso_fields_array”

js。文件:

jQuery(function(){

    jQuery('#add').click(function(evt){
    evt.preventDefault();
    var data = {
            action: 'update_options',
            my_var: 'my_data'
        };

        jQuery.post( ajaxurl, data);

});
});

注册一个动作“update_options”:

add_action( 'wp_ajax_update_options', 'update_options_callback' );
add_action( 'wp_ajax_nopriv_update_options', 'update_options_callback' );

更新选项“snso_fields_array”:

function update_options_callback() {
    $new_value = $_POST['my_var'];
    if ($new_value ='my_data') {
        $new_array = get_option('snso_fields_array');
        $new_array[]='';
        update_option('snso_fields_array',$new_array);
    }

}

它工作正常

现在我需要用“snso_fields_array”选项的新数据刷新我的表单。

4

0 回答 0