multicheck类型无法工作

options-framework-theme的multicheck类型无法工作

这阵子在为主题添加一些选项的时候,想让复选框默认勾选上,按照作者给出的示例进行修改,最总代码如下

function optionsframework_options() {

    $options[] = array(
        'name' => '多选框',
        'id' => 'my_multicheck',
        'std' => array(
            'one' => 1,
            'three' => 1
        ),
        'options' => array(
            'one' => '显示bbs-rr.com的logo',
            'two' => '允许bbs-rr.com评论',
            'three' => 'ajax评论'
        ),
        'type' => 'multicheck'
    );

    return $options;
}

multicheck类型无法工作
但是代码无论如何改都是死活勾选不上,这个让我折腾的半天

最总还是在框架的源码中发现了猫腻

在\inc\includes\class-options-sanitization.php 中的of_sanitize_multicheck方法

function of_sanitize_multicheck( $input, $option ) {
    $output = '';
    if ( is_array( $input ) ) {
        // output 应该是一个数组才对
        $output = array();
        foreach( $option['options'] as $key => $value ) {
            $output[$key] = false;
        }
        foreach( $input as $key => $value ) {
            if ( array_key_exists( $key, $option['options'] ) && $value ) {
                $output[$key] = '1';
            }
        }
    }
    return $output;
}
add_filter( 'of_sanitize_multicheck', 'of_sanitize_multicheck', 10, 2 );

我发现,其实很少有人需要实现多选的功能,无论如何就当做个记录吧,也希望能帮到他人。

评论
:broken_heart: :confounded: :flushed: :frowning: :grinning: :heart: :kissing_heart: :mask: :pensive: :rage: :relaxed: :scream: :smile: :smirk: :sob: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_winking_eye: :wink: