将自定义选项页面中的项目列入白名单

时间:2019-03-12 作者:tpsReports

我是一个相对的初学者,所以任何能为我指明正确方向的东西都是值得赞赏的。

我正在尝试将管理面板中的选项列入白名单。我在另一个文件(item whitelist.php)中有一个数组,其中包含白名单项目,我希望能够通过在自定义选项页面上输入新项目来添加到该数组中。我创建了一个带有textarea字段的选项页面,供用户输入新项目,但我不确定如何向另一个文件中的数组添加输入选项。

我假设我会将输入项发布到数据库中,并从另一个文件中的数据库中读取,但我花了一段时间试图找出如何做到这一点,并没有取得太大成功。

功能。php:

<?php
add_action( \'admin_menu\', \'mp_add_admin_menu\' );
add_action( \'admin_init\', \'mp_settings_init\' );

function mp_add_admin_menu(  ) { 
    add_options_page( \'my-plugin\', \'my-plugin\', \'manage_options\', \'my-plugin\', \'mp_options_page\' );
}

function mp_settings_init(  ) { 
    register_setting( \'pluginPage\', \'mp_settings\' );
    add_settings_section(
        \'mp_pluginPage_section\', 
        __( \'Your section description\', \'wordpress\' ), 
        \'mp_settings_section_callback\', 
        \'pluginPage\'
    );
    add_settings_field( 
        \'mp_textarea_field_0\', 
        __( \'Settings field description\', \'wordpress\' ), 
        \'mp_textarea_field_0_render\', 
        \'pluginPage\', 
        \'mp_pluginPage_section\' 
    );
}

function mp_textarea_field_0_render(  ) { 
    $options = get_option( \'mp_settings\' );
    ?>
    <textarea cols=\'40\' rows=\'5\' name=\'mp_settings[mp_textarea_field_0]\'> 
        <?php echo $options[\'mp_textarea_field_0\']; ?>
    </textarea>
    <?php
}

function mp_settings_section_callback(  ) { 
    echo __( \'This section description\', \'wordpress\' );
}

function mp_options_page(  ) { 
    ?>
    <div class="wrap">
    <form action=\'options.php\' method=\'post\'>
        <h1>my-plugin Settings</h1>
        <?php
        settings_fields( \'pluginPage\' );
        do_settings_sections( \'pluginPage\' );
        submit_button();
        ?>
    </form>
    </div>
    <?php
}

?>

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

我想我理解你想要实现的目标,但如果这是错误的,请纠正我。

您有一个在另一个文件中指定的数组。您希望用户能够使用选项表单将值附加到该默认数组。

我会这样做:当您在另一个文件中准备此数组时,将默认数组与用户设置的任何数组(如果有的话)合并。这样,用户将永远无法修改您的初始数组,但仍然可以对其进行贡献。

接下来,您将使用选项表单将用户数组存储到数据库中。最终产品如下所示:

<?php
// Your preset array. These are your default values.
$whitelist = array( \'your items here\' );
// Get the user array from your options. 
// This is where the options form stores these values.
$mp_settings = get_option( \'mp_settings\', false );
// Check to see if you have any values, if not set an empty array.
$user_whitelist = isset( $mp_settings[\'mp_textarea_field_0\'] ) ? $mp_settings[\'mp_textarea_field_0\'] : array();
// Merging these array together gives you a unified whitelist.
$whitelist = array_merge( $whitelist, $user_whitelist );
注意:这是您将添加到其他文件中的内容,您在本问题中没有共享的文件。