WordPress.org

Make WordPress Core

Ticket #14365: 14365.api.diff

File 14365.api.diff, 4.5 KB (added by westi, 4 years ago)

An alternative way using api additions

  • public/wp-admin/includes/plugin.php

     
    15931593 *      Default whitelisted option key names include "general," "discussion," and "reading," among others. 
    15941594 * @param string $option_name The name of an option to sanitize and save. 
    15951595 * @param unknown_type $sanitize_callback A callback function that sanitizes the option's value. 
     1596 * @param string $capability The capability required to edit this option. 
    15961597 * @return unknown 
    15971598 */ 
    1598 function register_setting( $option_group, $option_name, $sanitize_callback = '' ) { 
    1599         global $new_whitelist_options; 
     1599function register_setting( $option_group, $option_name, $sanitize_callback = '', $capability = '' ) { 
     1600        global $new_whitelist_options, $option_group_caps; 
    16001601 
    16011602        if ( 'misc' == $option_group ) { 
    16021603                _deprecated_argument( __FUNCTION__, '3.0', __( 'The miscellaneous options group has been removed. Use another settings group.' ) ); 
     
    16061607        $new_whitelist_options[ $option_group ][] = $option_name; 
    16071608        if ( $sanitize_callback != '' ) 
    16081609                add_filter( "sanitize_option_{$option_name}", $sanitize_callback ); 
     1610 
     1611        // Set the capability on the group for now - in the long run this could support per option caps 
     1612        if ( $capability != '' ) 
     1613                $option_group_caps[ $option_group ] = $capability; 
    16091614} 
    16101615 
    16111616/** 
  • public/wp-admin/options.php

     
    2424 
    2525wp_reset_vars(array('action', 'option_page')); 
    2626 
    27 $capability = 'manage_options'; 
    28  
    2927if ( empty($option_page) ) // This is for back compat and will eventually be removed. 
    3028        $option_page = 'options'; 
    31 else 
    32         $capability = apply_filters( "option_page_capability_{$option_page}", $capability ); 
     29 
     30$capability = 'manage_options'; 
     31if ( isset( $option_group_caps[ $option_page ] ) ) 
     32        $capability = $option_group_caps[ $option_page ]; 
    3333 
    3434if ( !current_user_can( $capability ) ) 
    3535        wp_die(__('Cheatin’ uh?')); 
  • public/wp-content/themes/twentyeleven/inc/theme-options.php

     
    4747                add_option( 'twentyeleven_theme_options', twentyeleven_get_default_theme_options() ); 
    4848 
    4949        register_setting( 
    50                 'twentyeleven_options',       // Options group, see settings_fields() call in theme_options_render_page() 
    51                 'twentyeleven_theme_options', // Database option, see twentyeleven_get_theme_options() 
    52                 'twentyeleven_theme_options_validate' // The sanitization callback, see twentyeleven_theme_options_validate() 
     50                'twentyeleven_options',                // Options group, see settings_fields() call in theme_options_render_page() 
     51                'twentyeleven_theme_options',          // Database option, see twentyeleven_get_theme_options() 
     52                'twentyeleven_theme_options_validate', // The sanitization callback, see twentyeleven_theme_options_validate() 
     53                'edit_theme_options'                        // The capability required to modify this option 
    5354        ); 
    5455} 
    5556add_action( 'admin_init', 'twentyeleven_theme_options_init' ); 
    5657 
    5758/** 
    58  * Change the capability required to save the 'twentyeleven_options' options group. 
    59  * 
    60  * @see twentyeleven_theme_options_init() First parameter to register_setting() is the name of the options group. 
    61  * @see twentyeleven_theme_options_add_page() The edit_theme_options capability is used for viewing the page. 
    62  * 
    63  * By default, the options groups for all registered settings require the manage_options capability. 
    64  * This filter is required to change our theme options page to edit_theme_options instead. 
    65  * By default, only administrators have either of these capabilities, but the desire here is 
    66  * to allow for finer-grained control for roles and users. 
    67  * 
    68  * @param string $capability The capability used for the page, which is manage_options by default. 
    69  * @return string The capability to actually use. 
    70  */ 
    71 function twentyeleven_option_page_capability( $capability ) { 
    72         return 'edit_theme_options'; 
    73 } 
    74 add_filter( 'option_page_capability_twentyeleven_options', 'twentyeleven_option_page_capability' ); 
    75  
    76 /** 
    7759 * Add our theme options page to the admin menu. 
    7860 * 
    7961 * This function is attached to the admin_menu action hook.