现在我已经考虑过了(Mark就是我,我在其他地方使用另一个帐户),注册设置所做的就是准备options.php 当存在有效的nonce时接受传入表单数据,并提供一种将清理方法挂接到该数据提交的方法。对于插件来说,这真的是一件很方便的事情,诸如此类。。
从网站的前端打电话就可以了update_option
就这样吧。它不需要在前端注册,因为您没有将表单数据提交给options.php 就像管理页面一样。
我试图复制您的问题,但一直无法复制,下面是我难看的测试代码,用于创建一个简单的注册页面,可以保存选项。
class RegisteredSettingsTest {
private $page;
private $name = \'test-option\';
private $options;
function __construct() {
add_action( \'admin_init\', array( $this, \'admin_init\' ) );
add_action( \'admin_menu\', array( $this, \'admin_menu\' ) );
}
function admin_init() {
register_setting( \'setting_ref\', $this->name, array( $this, \'update_option\' ) );
$this->options = get_option( $this->name );
}
function admin_menu() {
$this->page = add_dashboard_page( \'Test\',\'Test\',\'manage_options\',\'translatable_demo\', array( &$this , \'load\' ) );
}
function update_option( $data ) {
$clean = array_map( \'absint\', $data );
unset($data);
return $clean;
}
function load() {
?>
<div class="wrap">
<?php screen_icon(\'index\'); ?>
<h2>Test</h2>
<form action="options.php" method="post">
<?php settings_fields( \'setting_ref\' ); ?>
<p><label for="<?php $this->field_name( \'fieldone\') ?>">Field one <input value="<?php $this->get_option( \'fieldone\') ?>" name="<?php $this->field_name( \'fieldone\') ?>" type="text" /></label></p>
<p><label for="<?php $this->field_name( \'fieldtwo\') ?>">Field two <input value="<?php $this->get_option( \'fieldtwo\') ?>" name="<?php $this->field_name( \'fieldtwo\') ?>" type="text" /></label></p>
<p class="submit"><input type="submit" name="Submit" class="button-secondary action" value="Save" /></p>
</form>
<!-- Output options data, so we can see how it currently looks -->
<pre><?php print_r( $this->options ) ?></pre>
</div>
<?php
}
function field_name( $name, $echo = true ) {
$name = "{$this->name}[$name]";
if( $echo )
echo $name;
else
return $name;
}
function get_option( $name, $echo = true ) {
$val = \'\';
if( is_array( $this->options ) && isset( $this->options[$name] ) )
$val = $this->options[$name];
if( $echo )
echo $val;
else
return $val;
}
}
$r = new RegisteredSettingsTest;
我加载了页面,输入了值
1
和
2
进入字段并点击Save(这当然很好,我看到了值
1
和
2
). 我使用数值,因为这只是一个简单的测试。
我能想到的最简单的前端测试就是打电话update_option
在我的内部single.php(尽管我可以使用任何其他模板文件)。
update_option( \'test-option\', array(\'fieldone\'=>3,\'fieldtwo\'=>4) );
如果有问题,我仍然应该看到值
1
和
2
当我加载我的测试管理页面时。不幸的是,事实并非如此,新的价值观,
3
和
4
如图所示。
您是否可以发布用于从前端更新选项的代码?如果它在回调中,请发布整个函数,以及它所连接的操作/过滤器:)
UPDATE:
更新选项之前,请删除清理回调。
remove_all_filters( \'sanitize_option_test-option\', 10 );
并且您的值不会再被回调函数破坏,因为它将被解除挂钩:)