Ticket #15691: 15691.2.diff
| File 15691.2.diff, 22.8 KB (added by , 10 years ago) |
|---|
-
src/wp-admin/admin-header.php
257 257 */ 258 258 do_action( 'all_admin_notices' ); 259 259 260 if ( $parent_file == 'options-general.php' )260 if ( $parent_file == 'options-general.php' || $parent_file = 'settings.php' ) 261 261 require(ABSPATH . 'wp-admin/options-head.php'); -
src/wp-admin/includes/admin-filters.php
61 61 62 62 // Plugin hooks. 63 63 add_filter( 'whitelist_options', 'option_update_filter' ); 64 add_filter( 'whitelist_network_options', 'network_option_update_filter' ); 64 65 65 66 // Plugin Install hooks. 66 67 add_action( 'install_plugins_featured', 'install_dashboard' ); -
src/wp-admin/includes/misc.php
691 691 } 692 692 693 693 /** 694 * Process settings submitted by the Settings API. 694 695 * 696 * @since 4.5.0 697 * 698 * @global array $whitelist_options A whitelist of permitted settings fields 699 * 700 * @param string $option_page The id of the panel that submitted the settings 701 * @param string $context A context for the function. Either 'site' or 'network'. 702 */ 703 function process_settings( $option_page, $context = 'site' ) { 704 global $whitelist_options; 705 706 $unregistered = false; 707 switch ( $context ) { 708 case 'network': 709 /** This action is documented in wp-admin/network/edit.php */ 710 do_action( 'wpmuadminedit' ); 711 712 if ( 'general' == $option_page ) { 713 check_admin_referer( 'siteoptions' ); 714 } else { 715 check_admin_referer( $option_page . '-network-options' ); 716 } 717 break; 718 case 'site': 719 default: 720 $context = 'site'; // fix $context variable 721 722 if ( 'options' == $option_page && ! isset( $_POST['option_page'] ) ) { // This is for back compat and will eventually be removed. 723 $unregistered = true; 724 check_admin_referer( 'update-options' ); 725 } else { 726 check_admin_referer( $option_page . '-options' ); 727 } 728 } 729 730 if ( !isset( $whitelist_options[ $option_page ] ) ) 731 wp_die( __( '<strong>ERROR</strong>: options page not found.' ) ); 732 733 if ( 'site' === $context && 'options' == $option_page ) { 734 if ( is_multisite() && ! is_super_admin() ) 735 wp_die( __( 'You do not have sufficient permissions to modify unregistered settings for this site.' ) ); 736 $options = explode( ',', wp_unslash( $_POST[ 'page_options' ] ) ); 737 } else { 738 $options = $whitelist_options[ $option_page ]; 739 } 740 741 if ( $options ) { 742 // Handle translation install. 743 if ( ! empty( $_POST['WPLANG'] ) ) { // @todo: Skip if already installed 744 if ( 'site' === $context && ( ! is_multisite() || is_super_admin() ) || 'network' === $context ) { 745 require_once( ABSPATH . 'wp-admin/includes/translation-install.php' ); 746 747 if ( wp_can_install_language_pack() ) { 748 $language = wp_download_language_pack( $_POST['WPLANG'] ); 749 if ( $language ) { 750 $_POST['WPLANG'] = $language; 751 } 752 } 753 } 754 } 755 756 /** 757 * Fires before options of a specific context and page are updated. 758 * 759 * @since 4.5.0 760 * 761 * @param array white list options for the current settings page 762 */ 763 do_action( "pre_process_{$context}_settings_{$option_page}", $options ); 764 765 foreach ( $options as $option ) { 766 if ( $unregistered ) { 767 _deprecated_argument( 'options.php', '2.7', 768 sprintf( 769 /* translators: %s: the option/setting */ 770 __( 'The %s setting is unregistered. Unregistered settings are deprecated. See https://codex.wordpress.org/Settings_API' ), 771 '<code>' . $option . '</code>' 772 ) 773 ); 774 } 775 776 $option = trim( $option ); 777 $value = null; 778 if ( isset( $_POST[ $option ] ) ) { 779 $value = $_POST[ $option ]; 780 if ( ! is_array( $value ) ) 781 $value = trim( $value ); 782 $value = wp_unslash( $value ); 783 } 784 switch ( $context ) { 785 case 'network': 786 update_site_option( $option, $value ); 787 break; 788 case 'site': 789 default: 790 update_option( $option, $value ); 791 } 792 } 793 794 /** 795 * Fires after options of a specific context and page are updated. 796 * 797 * @since 4.5.0 798 * 799 * @param array white list options for the current settings page 800 */ 801 do_action( "processed_{$context}_settings_{$option_page}", $options ); 802 } 803 804 if ( 'network' === $context ) { 805 /** 806 * Fires after the network options are updated. 807 * 808 * @since MU 809 */ 810 do_action( 'update_wpmu_options' ); 811 } 812 813 /** 814 * Handle settings errors and return to options page 815 */ 816 // If no settings errors were registered add a general 'updated' message. 817 if ( !count( get_settings_errors() ) ) 818 add_settings_error('general', 'settings_updated', __('Settings saved.'), 'updated'); 819 820 if ( 'network' === $context ) { 821 set_site_transient( 'settings_errors', get_settings_errors(), 30 ); 822 } else { 823 set_transient( 'settings_errors', get_settings_errors(), 30 ); 824 } 825 826 /** 827 * Redirect back to the settings page that was submitted 828 */ 829 $goback = add_query_arg( 'settings-updated', 'true', wp_get_referer() ); 830 wp_redirect( $goback ); 831 exit; 832 } 833 834 /** 835 * 695 836 * @global array $_wp_admin_css_colors 696 837 */ 697 838 function wp_color_scheme_settings() { -
src/wp-admin/includes/plugin.php
1761 1761 * Register a setting and its sanitization callback 1762 1762 * 1763 1763 * @since 2.7.0 1764 * @since 4.5.0 Added $context parameter. 1764 1765 * 1765 1766 * @global array $new_whitelist_options 1767 * @global array $new_network_whitelist_options 1766 1768 * 1767 1769 * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. 1768 1770 * Default whitelisted option key names include "general," "discussion," and "reading," among others. 1769 1771 * @param string $option_name The name of an option to sanitize and save. 1770 1772 * @param callable $sanitize_callback A callback function that sanitizes the option's value. 1773 * @param string $context A context for the function. Either 'site' or 'network'. 1771 1774 */ 1772 function register_setting( $option_group, $option_name, $sanitize_callback = '' ) {1773 global $new_whitelist_options ;1775 function register_setting( $option_group, $option_name, $sanitize_callback = '', $context = 'site' ) { 1776 global $new_whitelist_options, $new_network_whitelist_options; 1774 1777 1775 if ( 'misc' == $option_group ) { 1776 _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); 1777 $option_group = 'general'; 1778 } 1778 if ( 'network' === $context ) { 1779 $new_network_whitelist_options[ $option_group ][] = $option_name; 1780 } else { 1781 if ( 'misc' == $option_group ) { 1782 _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); 1783 $option_group = 'general'; 1784 } 1779 1785 1780 if ( 'privacy' == $option_group ) { 1781 _deprecated_argument( __FUNCTION__, '3.5', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); 1782 $option_group = 'reading'; 1786 if ( 'privacy' == $option_group ) { 1787 _deprecated_argument( __FUNCTION__, '3.5', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); 1788 $option_group = 'reading'; 1789 } 1790 1791 $new_whitelist_options[ $option_group ][] = $option_name; 1783 1792 } 1784 1793 1785 $new_whitelist_options[ $option_group ][] = $option_name;1786 1794 if ( $sanitize_callback != '' ) 1787 1795 add_filter( "sanitize_option_{$option_name}", $sanitize_callback ); 1788 1796 } … … 1791 1799 * Unregister a setting 1792 1800 * 1793 1801 * @since 2.7.0 1802 * @since 4.5.0 Added $context parameter. 1794 1803 * 1795 1804 * @global array $new_whitelist_options 1805 * @global array $new_network_whitelist_options 1796 1806 * 1797 1807 * @param string $option_group 1798 1808 * @param string $option_name 1799 1809 * @param callable $sanitize_callback 1810 * @param string $context 1800 1811 */ 1801 function unregister_setting( $option_group, $option_name, $sanitize_callback = '' ) {1802 global $new_whitelist_options ;1812 function unregister_setting( $option_group, $option_name, $sanitize_callback = '', $context = 'site' ) { 1813 global $new_whitelist_options, $new_network_whitelist_options; 1803 1814 1804 if ( 'misc' == $option_group ) { 1805 _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); 1806 $option_group = 'general'; 1807 } 1815 if ( 'network' === $context ) { 1816 $pos = array_search( $option_name, (array) $new_network_whitelist_options[ $option_group ] ); 1817 if ( $pos !== false ) 1818 unset( $new_network_whitelist_options[ $option_group ][ $pos ] ); 1819 } else { 1820 if ( 'misc' == $option_group ) { 1821 _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); 1822 $option_group = 'general'; 1823 } 1808 1824 1809 if ( 'privacy' == $option_group ) { 1810 _deprecated_argument( __FUNCTION__, '3.5', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); 1811 $option_group = 'reading'; 1825 if ( 'privacy' == $option_group ) { 1826 _deprecated_argument( __FUNCTION__, '3.5', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); 1827 $option_group = 'reading'; 1828 } 1829 1830 $pos = array_search( $option_name, (array) $new_whitelist_options[ $option_group ] ); 1831 if ( $pos !== false ) 1832 unset( $new_whitelist_options[ $option_group ][ $pos ] ); 1812 1833 } 1813 1834 1814 $pos = array_search( $option_name, (array) $new_whitelist_options[ $option_group ] );1815 if ( $pos !== false )1816 unset( $new_whitelist_options[ $option_group ][ $pos ] );1817 1835 if ( $sanitize_callback != '' ) 1818 1836 remove_filter( "sanitize_option_{$option_name}", $sanitize_callback ); 1819 1837 } … … 1838 1856 } 1839 1857 1840 1858 /** 1859 * Refreshes the value of the network options whitelist available via the 'whitelist_network_options' filter. 1860 * 1861 * @since 4.5.0 1862 * 1863 * @global array $new_network_whitelist_options 1864 * 1865 * @param array $options 1866 * @return array 1867 */ 1868 function network_option_update_filter( $options ) { 1869 global $new_network_whitelist_options; 1870 1871 if ( is_array( $new_network_whitelist_options ) ) 1872 $options = add_option_whitelist( $new_network_whitelist_options, $options ); 1873 1874 return $options; 1875 } 1876 1877 /** 1841 1878 * Adds an array of options to the options whitelist. 1842 1879 * 1843 1880 * @since 2.7.0 … … 1904 1941 * Output nonce, action, and option_page fields for a settings page. 1905 1942 * 1906 1943 * @since 2.7.0 1944 * @since 4.5.0 Added $context parameter. 1907 1945 * 1908 1946 * @param string $option_group A settings group name. This should match the group name used in register_setting(). 1947 * @param string $context A context for the function. Either 'site' or 'network'. 1909 1948 */ 1910 function settings_fields( $option_group) {1949 function settings_fields( $option_group, $context = 'site' ) { 1911 1950 echo "<input type='hidden' name='option_page' value='" . esc_attr($option_group) . "' />"; 1912 1951 echo '<input type="hidden" name="action" value="update" />'; 1913 wp_nonce_field("$option_group-options"); 1952 if ( 'site' === $context ) { 1953 wp_nonce_field( "$option_group-options" ); 1954 } else { 1955 wp_nonce_field( "$option_group-$context-options" ); 1956 } 1914 1957 } 1915 1958 1916 1959 /** -
src/wp-admin/includes/template.php
1384 1384 * hasn't submitted data (i.e. when they first load an options page, or in admin_notices action hook) 1385 1385 * 1386 1386 * @since 3.0.0 1387 * @since 4.5.0 Added $context parameter. 1387 1388 * 1388 1389 * @global array $wp_settings_errors Storage array of errors registered during this pageload 1389 1390 * 1390 1391 * @param string $setting Optional slug title of a specific setting who's errors you want. 1391 1392 * @param boolean $sanitize Whether to re-sanitize the setting value before returning errors. 1393 * @param string $context A context for the function. Either 'site' or 'network'. 1392 1394 * @return array Array of settings errors 1393 1395 */ 1394 function get_settings_errors( $setting = '', $sanitize = false ) {1396 function get_settings_errors( $setting = '', $sanitize = false, $context = 'site' ) { 1395 1397 global $wp_settings_errors; 1396 1398 1397 1399 /* … … 1403 1405 sanitize_option( $setting, get_option( $setting ) ); 1404 1406 1405 1407 // If settings were passed back from options.php then use them. 1406 if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] && get_transient( 'settings_errors' ) ) { 1407 $wp_settings_errors = array_merge( (array) $wp_settings_errors, get_transient( 'settings_errors' ) ); 1408 delete_transient( 'settings_errors' ); 1408 if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] ) { 1409 if ( 'network' === $context && get_site_transient( 'settings_errors' ) ) { 1410 $wp_settings_errors = array_merge( (array) $wp_settings_errors, get_site_transient( 'settings_errors' ) ); 1411 delete_site_transient( 'settings_errors' ); 1412 } elseif ( 'site' === $context && get_transient( 'settings_errors' ) ) { 1413 $wp_settings_errors = array_merge( (array) $wp_settings_errors, get_transient( 'settings_errors' ) ); 1414 delete_transient( 'settings_errors' ); 1415 } 1409 1416 } 1410 1417 1411 1418 // Check global in case errors have been added on this pageload. … … 1446 1453 * missing settings when the user arrives at the settings page. 1447 1454 * 1448 1455 * @since 3.0.0 1456 * @since 4.5.0 Added $context parameter. 1449 1457 * 1450 1458 * @param string $setting Optional slug title of a specific setting who's errors you want. 1451 1459 * @param bool $sanitize Whether to re-sanitize the setting value before returning errors. 1452 1460 * @param bool $hide_on_update If set to true errors will not be shown if the settings page has already been submitted. 1461 * @param string $context A context for the function. Either 'site' or 'network'. 1453 1462 */ 1454 function settings_errors( $setting = '', $sanitize = false, $hide_on_update = false ) {1463 function settings_errors( $setting = '', $sanitize = false, $hide_on_update = false, $context = 'site' ) { 1455 1464 1456 1465 if ( $hide_on_update && ! empty( $_GET['settings-updated'] ) ) 1457 1466 return; 1458 1467 1459 $settings_errors = get_settings_errors( $setting, $sanitize );1468 $settings_errors = get_settings_errors( $setting, $sanitize, $context ); 1460 1469 1461 1470 if ( empty( $settings_errors ) ) 1462 1471 return; -
src/wp-admin/network/settings.php
22 22 $title = __( 'Network Settings' ); 23 23 $parent_file = 'settings.php'; 24 24 25 wp_reset_vars(array('action', 'option_page')); 26 27 $whitelist_options = array( 28 'general' => array( 29 'registrationnotification', 'registration', 'add_new_users', 'menu_items', 30 'upload_space_check_disabled', 'blog_upload_space', 'upload_filetypes', 'site_name', 31 'first_post', 'first_page', 'first_comment', 'first_comment_url', 'first_comment_author', 32 'welcome_email', 'welcome_user_email', 'fileupload_maxk', 'global_terms_enabled', 33 'illegal_names', 'limited_email_domains', 'banned_email_domains', 'WPLANG', 'admin_email', 34 ), 35 ); 36 37 /** 38 * Filter the network options white list. 39 * 40 * @since 4.5.0 41 * 42 * @param array White list network options. 43 */ 44 $whitelist_options = apply_filters( 'whitelist_network_options', $whitelist_options ); 45 46 if ( 'update' == $action ) { 47 function fix_empty_vars() { 48 $checked_options = array( 'menu_items' => array(), 'registrationnotification' => 'no', 'upload_space_check_disabled' => 1, 'add_new_users' => 0 ); 49 foreach ( $checked_options as $option_name => $option_unchecked_value ) { 50 if ( ! isset( $_POST[$option_name] ) ) 51 $_POST[$option_name] = $option_unchecked_value; 52 } 53 } 54 add_action( 'pre_process_network_settings_general', 'fix_empty_vars' ); 55 56 function fix_wplang_var() { 57 // Handle translation install. 58 if ( ! empty( $_POST['WPLANG'] ) && wp_can_install_language_pack() ) { // @todo: Skip if already installed 59 $language = wp_download_language_pack( $_POST['WPLANG'] ); 60 if ( $language ) { 61 $_POST['WPLANG'] = $language; 62 } 63 } 64 } 65 add_action( 'pre_process_network_settings_general', 'fix_wplang_var' ); 66 67 process_settings( $option_page, 'network' ); 68 } 69 25 70 add_action( 'admin_head', 'network_settings_add_js' ); 26 71 27 72 get_current_screen()->add_help_tab( array( … … 44 89 '<p>' . __('<a href="https://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>' 45 90 ); 46 91 47 if ( $_POST ) {48 /** This action is documented in wp-admin/network/edit.php */49 do_action( 'wpmuadminedit' );50 51 check_admin_referer( 'siteoptions' );52 53 $checked_options = array( 'menu_items' => array(), 'registrationnotification' => 'no', 'upload_space_check_disabled' => 1, 'add_new_users' => 0 );54 foreach ( $checked_options as $option_name => $option_unchecked_value ) {55 if ( ! isset( $_POST[$option_name] ) )56 $_POST[$option_name] = $option_unchecked_value;57 }58 59 $options = array(60 'registrationnotification', 'registration', 'add_new_users', 'menu_items',61 'upload_space_check_disabled', 'blog_upload_space', 'upload_filetypes', 'site_name',62 'first_post', 'first_page', 'first_comment', 'first_comment_url', 'first_comment_author',63 'welcome_email', 'welcome_user_email', 'fileupload_maxk', 'global_terms_enabled',64 'illegal_names', 'limited_email_domains', 'banned_email_domains', 'WPLANG', 'admin_email',65 );66 67 // Handle translation install.68 if ( ! empty( $_POST['WPLANG'] ) && wp_can_install_language_pack() ) { // @todo: Skip if already installed69 $language = wp_download_language_pack( $_POST['WPLANG'] );70 if ( $language ) {71 $_POST['WPLANG'] = $language;72 }73 }74 75 foreach ( $options as $option_name ) {76 if ( ! isset($_POST[$option_name]) )77 continue;78 $value = wp_unslash( $_POST[$option_name] );79 update_site_option( $option_name, $value );80 }81 82 /**83 * Fires after the network options are updated.84 *85 * @since MU86 */87 do_action( 'update_wpmu_options' );88 89 wp_redirect( add_query_arg( 'updated', 'true', network_admin_url( 'settings.php' ) ) );90 exit();91 }92 93 92 include( ABSPATH . 'wp-admin/admin-header.php' ); 94 93 95 if ( isset( $_GET['updated'] ) ) {96 ?><div id="message" class="updated notice is-dismissible"><p><?php _e( 'Options saved.' ) ?></p></div><?php97 }98 94 ?> 99 95 100 96 <div class="wrap"> 101 97 <h1><?php echo esc_html( $title ); ?></h1> 102 98 <form method="post" action="settings.php" novalidate="novalidate"> 103 99 <?php wp_nonce_field( 'siteoptions' ); ?> 100 <input type="hidden" name="action" value="update" /> 101 <input type="hidden" name="option_page" value="general" /> 104 102 <h2><?php _e( 'Operational Settings' ); ?></h2> 105 103 <table class="form-table"> 106 104 <tr> -
src/wp-admin/options-head.php
15 15 add_settings_error('general', 'settings_updated', __('Settings saved.'), 'updated'); 16 16 } 17 17 18 settings_errors(); 18 if ( is_network_admin() ) { 19 settings_errors( '', false, false, 'network' ); 20 } else { 21 settings_errors(); 22 } -
src/wp-admin/options.php
147 147 * If $_GET['action'] == 'update' we are saving settings sent from a settings page 148 148 */ 149 149 if ( 'update' == $action ) { 150 if ( 'options' == $option_page && !isset( $_POST['option_page'] ) ) { // This is for back compat and will eventually be removed. 151 $unregistered = true; 152 check_admin_referer( 'update-options' ); 153 } else { 154 $unregistered = false; 155 check_admin_referer( $option_page . '-options' ); 156 } 157 158 if ( !isset( $whitelist_options[ $option_page ] ) ) 159 wp_die( __( '<strong>ERROR</strong>: options page not found.' ) ); 160 161 if ( 'options' == $option_page ) { 162 if ( is_multisite() && ! is_super_admin() ) 163 wp_die( __( 'You do not have sufficient permissions to modify unregistered settings for this site.' ) ); 164 $options = explode( ',', wp_unslash( $_POST[ 'page_options' ] ) ); 165 } else { 166 $options = $whitelist_options[ $option_page ]; 167 } 168 169 if ( 'general' == $option_page ) { 170 // Handle custom date/time formats. 150 function fix_datetime_vars() { 171 151 if ( !empty($_POST['date_format']) && isset($_POST['date_format_custom']) && '\c\u\s\t\o\m' == wp_unslash( $_POST['date_format'] ) ) 172 152 $_POST['date_format'] = $_POST['date_format_custom']; 173 153 if ( !empty($_POST['time_format']) && isset($_POST['time_format_custom']) && '\c\u\s\t\o\m' == wp_unslash( $_POST['time_format'] ) ) … … 178 158 $_POST['gmt_offset'] = preg_replace('/UTC\+?/', '', $_POST['gmt_offset']); 179 159 $_POST['timezone_string'] = ''; 180 160 } 161 } 162 add_action( 'pre_process_site_settings_general', 'fix_datetime_vars' ); 181 163 164 function fix_wplang_var() { 182 165 // Handle translation install. 183 166 if ( ! empty( $_POST['WPLANG'] ) && ( ! is_multisite() || is_super_admin() ) ) { // @todo: Skip if already installed 184 167 require_once( ABSPATH . 'wp-admin/includes/translation-install.php' ); … … 191 174 } 192 175 } 193 176 } 177 add_action( 'pre_process_site_settings_general', 'fix_wplang_var' ); 194 178 195 if ( $options ) { 196 foreach ( $options as $option ) { 197 if ( $unregistered ) { 198 _deprecated_argument( 'options.php', '2.7', 199 sprintf( 200 /* translators: %s: the option/setting */ 201 __( 'The %s setting is unregistered. Unregistered settings are deprecated. See https://codex.wordpress.org/Settings_API' ), 202 '<code>' . $option . '</code>' 203 ) 204 ); 205 } 206 207 $option = trim( $option ); 208 $value = null; 209 if ( isset( $_POST[ $option ] ) ) { 210 $value = $_POST[ $option ]; 211 if ( ! is_array( $value ) ) 212 $value = trim( $value ); 213 $value = wp_unslash( $value ); 214 } 215 update_option( $option, $value ); 216 } 217 179 function maybe_switch_language() { 218 180 // Switch translation in case WPLANG was changed. 219 181 $language = get_option( 'WPLANG' ); 220 182 if ( $language ) { … … 223 185 unload_textdomain( 'default' ); 224 186 } 225 187 } 188 add_action( 'processed_site_settings_general', 'maybe_switch_language' ); 226 189 227 /** 228 * Handle settings errors and return to options page 229 */ 230 // If no settings errors were registered add a general 'updated' message. 231 if ( !count( get_settings_errors() ) ) 232 add_settings_error('general', 'settings_updated', __('Settings saved.'), 'updated'); 233 set_transient('settings_errors', get_settings_errors(), 30); 234 235 /** 236 * Redirect back to the settings page that was submitted 237 */ 238 $goback = add_query_arg( 'settings-updated', 'true', wp_get_referer() ); 239 wp_redirect( $goback ); 240 exit; 190 process_settings( $option_page, 'site' ); 241 191 } 242 192 243 193 include( ABSPATH . 'wp-admin/admin-header.php' ); ?>