嗨,我正在实现一个核心插件和附加组件。有一个设置页面,我想把插件的一些验证例程挂接到核心插件的验证函数中。但是它不起作用。你能给我指出正确的方向吗?
以下是我所拥有内容的摘录:
register_setting( \'myp_settings\', \'myp_settings\', \'myp_settings_validate\' );
function myp_settings_validate( $input ) {
$options = get_option( \'myp_settings\' );
do_action( \'myp_settings_validate\', $input, $options );
return $options;
}
上面是核心插件的代码,下面是插件:
add_action( \'myp_settings_validate\', \'myp_settings_et_validate\', \'\', 2 );
function myp_settings_et_validate( $input, $options ) {
if ( ! isset( $input[\'excerpt_enable\'] ) || $input[\'excerpt_enable\'] != \'1\' )
$options[\'excerpt_enable\'] = 0;
else
$options[\'excerpt_enable\'] = 1;
if ( ! isset( $input[\'thumbnail_enable\'] ) || $input[\'thumbnail_enable\'] != \'1\' )
$options[\'thumbnail_enable\'] = 0;
else
$options[\'thumbnail_enable\'] = 1;
return $options;
}
最合适的回答,由SO网友:fuxia 整理而成
do_action()
不使用返回值。它的工作原理更像onload
JavaScript中的事件:无法撤消加载。要更改值,需要过滤器。
如果要更改选项内容,请挂接到pre_update_option_{$option_name}
非常晚(具有高优先级参数):
add_filter( \'pre_update_option_myp_settings\', \'myp_settings_et_validate\', 100, 3 );
function myp_settings_et_validate( $option, $newvalue, $oldvalue )
{
# do something awesome and return a value
}