不幸的是,这些字段的html硬编码到wp-admin/options-general.php
文件,并且没有阻止它们显示的筛选器。
下一个最好的方法可能是禁用它们。以下是我的做法:
步骤1:向常规选项页面添加一点js/jQuery,该页面将针对要禁用的输入/选择,并添加disabled
归因于他们。
PHP:
add_action( \'admin_enqueue_scripts\', \'wpse_maybe_add_custom_disable_fields_js\' );
function wpse_maybe_add_custom_disable_fields_js() {
if ( \'options-general\' == get_current_screen()->id && is_multisite() && ! current_user_can( \'manage_network_options\' ) ) {
wp_enqueue_script( \'wpse_custom_disable_fields\', \'path/to/disabler_script.js\', array( \'jquery\' ), false, true );
}
}
其中,在上面替换“path/to/disabler\\u脚本”。js`具有以下文件的正确路径:
JS公司:
(function ($) {
var fieldsIds = [
\'blogdescription\',
\'WPLANG\',
\'timezone_string\',
\'date_format_custom_radio\',
\'date_format_custom\',
\'time_format_custom_radio\',
\'time_format_custom\',
\'start_of_week\'
];
$(document).ready(function () {
fieldsIds.forEach(function (el) {
$(\'#\' + el).attr(\'disabled\', \'disabled\');
});
var radios = $(\'input[name="date_format"], input[name="time_format"]\');
$.each(radios, function (index, el ) {
$(el).attr(\'disabled\', \'diabled\');
});
});
})(jQuery);
到目前为止,我们已经让一个“有创意”的管理员很难在这些领域中输入内容,但他们仍然可以将其破解到浏览器中。因此,第2步,我们需要在服务器端进行绑定。在这里,WP给了我们一些帮助,因为这些设置在选项处理中都是白名单,我们确实有一个过滤器来取消白名单:
PHP:
add_filter( \'whitelist_options\', \'wpse_maybe_remove_settings_from_whitelist\' );
function wpse_maybe_remove_settings_from_whitelist( array $whitelist_options ) {
if ( is_multisite() && ! current_user_can( \'manage_network_options\' ) ) {
$whitelist_options[\'general\'] = array( \'blogname\', \'new_admin_email\' );
}
return $whitelist_options;
}
现在,当返回常规设置表单时,即使其他选项已被入侵并提交,也只会处理白名单上的选项。