如何在不覆盖旧值的情况下保存选项的新值和旧值

时间:2018-09-03 作者:Ahmed Rabea

我刚试过这个

function myplugin_update_field_foo( $new_value, $old_value ) {
if ($newvalue !== $oldvalue && !empty($oldvalue)) {
    $newvalue = array_unique( array_merge( $newvalue, $oldvalue ) );
}
return $newvalue;
}

function myplugin_init() {
    add_filter( \'pre_update_option_ra_new_series_options\', \'myplugin_update_field_foo\', 10, 2 );
}

add_action( \'init\', \'myplugin_init\' );
并使用此选项在选项页中显示结果,但不显示任何内容

        <?php $opt=get_option( \'ra_new_series_options\', $default = false ); ?>
    <?php print_r($opt); ?>

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

变量名称拼写错误。您将其定义为$new_value$old_value 具有underscore 你忘了的。

除此之外,您的代码运行良好。

function myplugin_update_field_foo( $new_value, $old_value ) {
    if ($new_value !== $old_value && is_array($old_value)  && is_array($new_value)) {
        $new_value = array_unique( array_merge( $new_value, $old_value ) );
    }
    return $new_value;
}
获取您使用的选项

$opt = get_option( \'ra_new_series_options\' );
如果不存在这样的默认值,则可以设置默认值:

$opt = get_option( \'ra_new_series_options\', [1, 3] );
您还需要确保$new_value 以及$old_value 是数组类型,因为如果其中一个不是,则代码将中断。

如果要合并不同类型(数组、字符串、整数),可以执行以下操作:

add_filter( \'pre_update_option_ra_new_series_options\', \'myplugin_update_field_foo\', 10, 2 );
function myplugin_update_field_foo( $new_value, $old_value ) {
    $new_value_array = [];

    // Check if array and merge if not push into the array
    if( is_array( $new_value ) ) {
        $new_value_array = array_merge( $new_value_array, $new_value );
    } else {
        array_push( $new_value_array, $new_value );
    }

    if( is_array( $old_value ) ) {
        $new_value_array = array_merge( $new_value_array, $old_value );
    } else {
        array_push( $new_value_array, $old_value );
    }

    $new_value_array = array_unique( $new_value_array );

    return $new_value_array;
}

结束