我在一个主题中添加了一个设置部分,允许用户输入将随机显示在网站上的推荐信。每个推荐信有2个字段,author
和testimonial
, 我已按以下方式注册设置:
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>
所以我想我可以从
author
和
testimonial
内部字段
save_testimonials
, 将它们组合到一个数组中,并将其附加到现有数组中,然后保存
$_POST
和
$_REQUEST
在回调中都是空的。
我该怎么做?
最合适的回答,由SO网友:Stephen Harris 整理而成
你最好用add_settings_field
和add_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.