将多个字段另存为数组

时间:2012-04-26 作者:Dan

我在一个主题中添加了一个设置部分,允许用户输入将随机显示在网站上的推荐信。每个推荐信有2个字段,authortestimonial, 我已按以下方式注册设置:

register_setting( \'settings-website\', \'option_testimonials\', \'save_testimonials\' );
我想在该选项中存储一个数组,如下所示:

array(3) {
  [0]=>
  array(2) {
    ["author"]=>
    string(8) "Person A"
    ["testimonial"]=>
    string(14) "Great website!"
  }
  [1]=>
  array(2) {
    ["author"]=>
    string(8) "Person B"
    ["testimonial"]=>
    string(15) "Excellent work!"
  }
  [2]=>
  array(2) {
    ["author"]=>
    string(8) "Person C"
    ["testimonial"]=>
    string(10) "Brilliant!"
  }
}
我的选项表单如下所示:

<?php
$testimonials = get_option(\'option_testimonials\');
if( !is_array($testimonials) )
    $testimonials = array();
?>
<div class="wrap">
<h2>Testimonials</h2>
<form method="post" action="options.php">
    <?php settings_fields( \'ddtheme-settings-testimonials\' ); ?>
    <table class="form-table">
        <?php foreach( $testimonials as $testimonial ) { ?>
        <tr valign="top">
        <th scope="row">Testimonial</th>
        <td>
        </td>
        </tr>
        <?php } ?>
        <tr valign="top">
        <th scope="row">New testimonial</th>
        <td>
            <label>Author:</label><br/>
            <input type="text" name="author" style="width: 400px;" /><br/>
            <label>Testimonial:</label><br/>
            <textarea name="testimonial" style="width: 400px;"></textarea>
        </td>
        </tr>
    </table>
    <p class="submit">
    <input type="submit" class="button-primary" value="<?php _e(\'Save Changes\') ?>" />
    </p>
</form>
</div>
所以我想我可以从authortestimonial 内部字段save_testimonials, 将它们组合到一个数组中,并将其附加到现有数组中,然后保存$_POST$_REQUEST 在回调中都是空的。

我该怎么做?

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

你最好用add_settings_fieldadd_settings_section...

但无论如何,save_testimonials 是验证/保存回调函数。它从表单中获得数据,其工作是检查数据,然后返回已验证的选项。你不应该碰$_POST$_REQUEST - 这就是settings api.

save_callback{$array_of_data_from_form){

     //Validate the $array_of_data_from_form 

     $validated=array()//Your settings array after validation

    return $validated;
}`
But 它将只接收具有输入名称的数据option_testimonials 在您的register_setting. 所以输入字段需要以下名称option_testimonials[testimonial]option_testimonials[author].

最佳实践要求您应在选项名称前加前缀(option_testimonials 有点过于泛化)。

就有关设置API的教程而言,您不会犯太大的错误this post.

结束

相关推荐

Wp_Options与新表的效率

我正在构建一个WordPress主题框架,随着开发的进展,它可能会有很多选项。我发现了一个相关的问题:When is it appropriate to create a new table in the WordPress database?, 这表明新表的效率会更高,但我想知道更多。有道理的是,如果对1000个条目使用新表更快,那么对数十个或数百个条目也必须更快。此外,wp\\U选项表可能变得非常混乱。这两个选项在查询执行时间、内存使用和其他因素方面有什么区别?