WordPress设置API和选项数组结构

时间:2012-02-23 作者:kaira

如何让设置API保存如下数组结构中的选项:

$array = array (
                array(
             \'id\'=> \'1\',
             \'name\'=> \'tom\',
             \'pageurl\'=> \'someurl\',
             \'notes\'=> \'someNotes\'
              )
                array(
                 \'id\'=>\'2\',
                 \'name\'=>\'harry\',
                 \'pageurl\'=>\'someotherurl\',
                 \'notes\'=>\'anothernote\'
                  ) 
          );
此数组获取用户在其中添加和删除的数据集。我使用的wp\\u list\\u table类的选项设置方式相同,我需要能够在以后编辑这些值,而无需删除需要更改的数组的整个数据集,然后重新创建它。我尝试过presscoders示例和ozh示例选项解决方案,但没有成功。我正在尝试更新数组中的名称字段。我使用这个数组结构的唯一原因是因为wp list表。

我要把头发拔出来,想让它工作。

以下是我尝试过的:

add_action(\'admin_init\', \'ozh_sampleoptions_init\' );
add_action(\'admin_menu\', \'ozh_sampleoptions_add_page\');

// Init plugin options to white list our options
function ozh_sampleoptions_init(){
    register_setting( \'ozh_sampleoptions_options\', \'fp_options\', \'ozh_sampleoptions_validate\' );
}

// Add menu page
function ozh_sampleoptions_add_page() {
    add_options_page(\'Ozh\\\'s Sample Options\', \'Sample Options\', \'manage_options\', \'ozh_sampleoptions\', \'ozh_sampleoptions_do_page\');
}

// Draw the menu page itself
function ozh_sampleoptions_do_page() {
    ?>
    <div class="wrap">
        <h2>Ozh\'s Sample Options</h2>
        <form method="post" action="options.php">
            <?php settings_fields(\'ozh_sampleoptions_options\'); ?>
            <?php $options = get_option(\'fp_options\'); ?>
            <table class="form-table">

                <tr valign="top"><th scope="row">Tab Name</th>
                    <td><input type="text" name="ozh_sample[name]" size="75" value="<?php echo $options[0][\'name\']; ?>" /></td>
                </tr>
            </table>
            <p class="submit">
            <input type="submit" class="button-primary" value="<?php _e(\'Save Changes\') ?>" />
            </p>
        </form>
    </div>
    <?php   
}

// Sanitize and validate input. Accepts an array, return a sanitized array.
function ozh_sampleoptions_validate($input) {

    // Say our option must be safe text with no HTML tags
    $input[0][\'name\'] =  wp_filter_nohtml_kses($input[\'name\']);

    return $input;
}

1 个回复
SO网友:Chip Bennett

设置API通常需要key => value 类型我确信使用设置API保存数组数据是可能的,但它在某种程度上绕过了API的用途。

如果我对你的问题理解正确,你是想Plugin Option, 并使用该选项的值更新wp_list_table 班最直接的方法可能是将一些唯一键保存为插件选项,然后将该唯一键与用于扩展的单独数组交叉引用wp_list_table.

换句话说,构建wp_list_table 值数组,可能是这样的:

<?php
function plugin_slug_get_wp_list_table_data() {
    $data = array(
        \'a\' = array(
            \'id\'=> \'1\',
            \'name\'=> \'tom\',
            \'pageurl\'=> \'someurl\',
            \'notes\'=> \'someNotes\'
        ),
        \'b\' = array(
            \'id\'=> \'1\',
            \'name\'=> \'tom\',
            \'pageurl\'=> \'someurl\',
            \'notes\'=> \'someNotes\'
        ),
        \'c\' = array(
            \'id\'=> \'1\',
            \'name\'=> \'tom\',
            \'pageurl\'=> \'someurl\',
            \'notes\'=> \'someNotes\'
        ),
        \'d\' = array(
            \'id\'=> \'1\',
            \'name\'=> \'tom\',
            \'pageurl\'=> \'someurl\',
            \'notes\'=> \'someNotes\'
        ),
    );
    return $data;
}
?>
然后,将插件选项另存为\'a\', \'b\', \'c\', 或\'d\'.

然后,选择:

<?php
$plugin_slug_options = get_option( \'plugin_slug_options\' );
$plugin_slug_wp_list_table_setting = $plugin_slug_options[\'wp_list_table_setting\'];
?>
然后,使用选项设置获取要更新的数据wp_list_table:

<?php
$plugin_slug_wp_list_table_array = plugin_slug_get_wp_list_table_data();
$plugin_slug_wp_list_table_data = $plugin_slug_wp_list_table_array[$plugin_slug_wp_list_table_setting];
?>
(您实际执行wp_list_table 更新由您决定……)

结束

相关推荐