设置API-动态添加设置字段?

时间:2012-09-09 作者:Wordpressor

有没有办法添加settings fields 动态地?

我有自己的Settings API 选项生成器就像Chip Bennet的一样Oenology Theme, 一切都很完美,但我找不到创建动态字段的方法。

下面是我如何添加选项字段的。

1。首先,我描述所有字段:

 function my_options() {
    $options = array(
         array(
            \'id\' => \'1\',
            \'title\' => \'1\', 
            \'type\' => \'foo\',
            \'description\' =>  \'bar\',
        ),
          array(
            \'id\' => \'2\',
            \'title\' => \'2\', 
            \'type\' => \'foo\',
            \'description\' =>  \'bar\',
        ),
    );

   return $options;
 }

2。然后生成字段:

foreach(my_options() as $field) {
    add_settings_field(
       $field[\'id\'],
       $field[\'title\'],
       "something",
       "else",
       "goes",
       "there"
    );
}
然后执行:

   <?php $opts = get_option(\'my_theme_settings_api\'); 
   var_dump($opts); ?>
返回所有字段。

但是如果要“动态”生成一些字段,例如基于其他数组,就像这样:

function my_options() {

   // $myarray = some array of elements taken from different source, like json data from other website etc.
   $count = 0;
   foreach($myarray as $something) {
        $count++;
        $options[] = array(
            \'id\' => \'something\'. $count,
            \'title\' => $something[\'title\'],
            \'type\' => \'type\',
            \'desription\' => $something[\'description\'],
        );

   return $options;
 }
然后我将使用do_settings_sections() 但我无法将它们保存在管理页面上var_dump($opts); 就像上面的例子一样,这些选项并不存在。

有什么线索吗?

1 个回复
SO网友:phatskat

听起来您需要一种方法来将这些动态字段my_options 每次调用时都会调用。您可以尝试创建自己的筛选器以使用:

function my_options() {
    $myarray = apply_filters( \'my_get_options_dynamically\', array() );
    $count   = 0;

    foreach($myarray as $something) {
        $count++;
        $options[] = array(
            \'id\'         => \'something\'. $count,
            \'title\'      => $something[\'title\'],
            \'type\'       => \'type\',
            \'desription\' => $something[\'description\'],
        );

        return $options;
}

add_filter( \'my_get_options_dynamically\', function() {
    // Some code to get the dynamic option array.
    return array( array(
        \'title\'       => \'Some option title\',
        \'description\' => \'Some option description\',
    ) );
} );
<小时>

结束

相关推荐

当出现错误时,防止wp_login_form()重定向到wp-admin

我已经在我的网站前端使用wp_login_form(). 但是,当用户键入错误的用户名/密码时,他们会被重定向到wp admin登录表单。如何在登录表单上方显示任何错误消息?理想情况下,我不希望用户看到Wordpress管理部分。我试过使用redirect_invalid_login() 胡克,但这似乎不起作用?