query->init_query_vars(); WC()->query->add_endpoints(); flush_rewrite_rules(); do_action( 'woocommerce_settings_saved' ); } /** * Add a message * @param string $text */ public static function add_message( $text ) { self::$messages[] = $text; } /** * Add an error * @param string $text */ public static function add_error( $text ) { self::$errors[] = $text; } /** * Output messages + errors */ public static function show_messages() { if ( sizeof( self::$errors ) > 0 ) { foreach ( self::$errors as $error ) echo '

' . esc_html( $error ) . '

'; } elseif ( sizeof( self::$messages ) > 0 ) { foreach ( self::$messages as $message ) echo '

' . esc_html( $message ) . '

'; } } /** * Settings page. * * Handles the display of the main woocommerce settings page in admin. * * @access public * @return void */ public static function output() { global $current_section, $current_tab; do_action( 'woocommerce_settings_start' ); wp_enqueue_script( 'woocommerce_settings', WC()->plugin_url() . '/assets/js/admin/settings.min.js', array( 'jquery', 'jquery-ui-datepicker', 'jquery-ui-sortable', 'iris' ), WC()->version, true ); wp_localize_script( 'woocommerce_settings', 'woocommerce_settings_params', array( 'i18n_nav_warning' => __( 'The changes you made will be lost if you navigate away from this page.', 'woocommerce' ) ) ); // Include settings pages self::get_settings_pages(); // Get current tab/section $current_tab = empty( $_GET['tab'] ) ? 'general' : sanitize_text_field( urldecode( $_GET['tab'] ) ); $current_section = empty( $_REQUEST['section'] ) ? '' : sanitize_text_field( urldecode( $_REQUEST['section'] ) ); // Save settings if data has been posted if ( ! empty( $_POST ) ) self::save(); // Add any posted messages if ( ! empty( $_GET['wc_error'] ) ) self::add_error( urldecode( stripslashes( $_GET['wc_error'] ) ) ); if ( ! empty( $_GET['wc_message'] ) ) self::add_message( urldecode( stripslashes( $_GET['wc_message'] ) ) ); self::show_messages(); // Get tabs for the settings page $tabs = apply_filters( 'woocommerce_settings_tabs_array', array() ); include 'views/html-admin-settings.php'; } /** * Get a setting from the settings API. * * @param mixed $option * @return string */ public static function get_option( $option_name, $default = '' ) { // Array value if ( strstr( $option_name, '[' ) ) { parse_str( $option_name, $option_array ); // Option name is first key $option_name = current( array_keys( $option_array ) ); // Get value $option_values = get_option( $option_name, '' ); $key = key( $option_array[ $option_name ] ); if ( isset( $option_values[ $key ] ) ) $option_value = $option_values[ $key ]; else $option_value = null; // Single value } else { $option_value = get_option( $option_name, null ); } if ( is_array( $option_value ) ) $option_value = array_map( 'stripslashes', $option_value ); elseif ( ! is_null( $option_value ) ) $option_value = stripslashes( $option_value ); return $option_value === null ? $default : $option_value; } /** * Output admin fields. * * Loops though the woocommerce options array and outputs each field. * * @access public * @param array $options Opens array to output */ public static function output_fields( $options ) { foreach ( $options as $value ) { if ( ! isset( $value['type'] ) ) continue; if ( ! isset( $value['id'] ) ) $value['id'] = ''; if ( ! isset( $value['title'] ) ) $value['title'] = isset( $value['name'] ) ? $value['name'] : ''; if ( ! isset( $value['class'] ) ) $value['class'] = ''; if ( ! isset( $value['css'] ) ) $value['css'] = ''; if ( ! isset( $value['default'] ) ) $value['default'] = ''; if ( ! isset( $value['desc'] ) ) $value['desc'] = ''; if ( ! isset( $value['desc_tip'] ) ) $value['desc_tip'] = false; // Custom attribute handling $custom_attributes = array(); if ( ! empty( $value['custom_attributes'] ) && is_array( $value['custom_attributes'] ) ) foreach ( $value['custom_attributes'] as $attribute => $attribute_value ) $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"'; // Description handling if ( $value['desc_tip'] === true ) { $description = ''; $tip = $value['desc']; } elseif ( ! empty( $value['desc_tip'] ) ) { $description = $value['desc']; $tip = $value['desc_tip']; } elseif ( ! empty( $value['desc'] ) ) { $description = $value['desc']; $tip = ''; } else { $description = $tip = ''; } if ( $description && in_array( $value['type'], array( 'textarea', 'radio' ) ) ) { $description = '

' . wp_kses_post( $description ) . '

'; } elseif ( $description ) { $description = '' . wp_kses_post( $description ) . ''; } if ( $tip && in_array( $value['type'], array( 'checkbox' ) ) ) { $tip = '

' . $tip . '

'; } elseif ( $tip ) { $tip = ''; } // Switch based on type switch( $value['type'] ) { // Section Titles case 'title': if ( ! empty( $value['title'] ) ) echo '

' . esc_html( $value['title'] ) . '

'; if ( ! empty( $value['desc'] ) ) echo wpautop( wptexturize( wp_kses_post( $value['desc'] ) ) ); echo ''. "\n\n"; if ( ! empty( $value['id'] ) ) do_action( 'woocommerce_settings_' . sanitize_title( $value['id'] ) ); break; // Section Ends case 'sectionend': if ( ! empty( $value['id'] ) ) do_action( 'woocommerce_settings_' . sanitize_title( $value['id'] ) . '_end' ); echo '
'; if ( ! empty( $value['id'] ) ) do_action( 'woocommerce_settings_' . sanitize_title( $value['id'] ) . '_after' ); break; // Standard text inputs and subtypes like 'number' case 'text': case 'email': case 'number': case 'color' : case 'password' : $type = $value['type']; $class = ''; $option_value = self::get_option( $value['id'], $value['default'] ); if ( $value['type'] == 'color' ) { $type = 'text'; $value['class'] .= 'colorpick'; $description .= ''; } ?> />
× px $value['id'], 'id' => $value['id'], 'sort_column' => 'menu_order', 'sort_order' => 'ASC', 'show_option_none' => ' ', 'class' => $value['class'], 'echo' => false, 'selected' => absint( self::get_option( $value['id'] ) ) ); if( isset( $value['args'] ) ) $args = wp_parse_args( $value['args'], $args ); ?> countries->countries; if ( strstr( $country_setting, ':' ) ) { $country_setting = explode( ':', $country_setting ); $country = current( $country_setting ); $state = end( $country_setting ); } else { $country = $country_setting; $state = '*'; } ?> countries->countries; asort( $countries ); ?>
0 or set to '' if ( ! empty( $_POST[ $value['id'] ] ) ) { $option_value = absint( $_POST[ $value['id'] ] ); } else { $option_value = ''; } wp_clear_scheduled_hook( 'woocommerce_cancel_unpaid_orders' ); if ( $option_value != '' ) wp_schedule_single_event( time() + ( absint( $option_value ) * 60 ), 'woocommerce_cancel_unpaid_orders' ); } else { if ( isset( $_POST[$value['id']] ) ) { $option_value = wc_clean( stripslashes( $_POST[ $value['id'] ] ) ); } else { $option_value = ''; } } break; // Special types case "multiselect" : case "multi_select_countries" : // Get countries array if ( isset( $_POST[ $value['id'] ] ) ) $selected_countries = array_map( 'wc_clean', array_map( 'stripslashes', (array) $_POST[ $value['id'] ] ) ); else $selected_countries = array(); $option_value = $selected_countries; break; case "image_width" : if ( isset( $_POST[$value['id'] ]['width'] ) ) { $update_options[ $value['id'] ]['width'] = wc_clean( stripslashes( $_POST[ $value['id'] ]['width'] ) ); $update_options[ $value['id'] ]['height'] = wc_clean( stripslashes( $_POST[ $value['id'] ]['height'] ) ); if ( isset( $_POST[ $value['id'] ]['crop'] ) ) $update_options[ $value['id'] ]['crop'] = 1; else $update_options[ $value['id'] ]['crop'] = 0; } else { $update_options[ $value['id'] ]['width'] = $value['default']['width']; $update_options[ $value['id'] ]['height'] = $value['default']['height']; $update_options[ $value['id'] ]['crop'] = $value['default']['crop']; } break; // Custom handling default : do_action( 'woocommerce_update_option_' . $type, $value ); break; } if ( ! is_null( $option_value ) ) { // Check if option is an array if ( strstr( $value['id'], '[' ) ) { parse_str( $value['id'], $option_array ); // Option name is first key $option_name = current( array_keys( $option_array ) ); // Get old option value if ( ! isset( $update_options[ $option_name ] ) ) $update_options[ $option_name ] = get_option( $option_name, array() ); if ( ! is_array( $update_options[ $option_name ] ) ) $update_options[ $option_name ] = array(); // Set keys and value $key = key( $option_array[ $option_name ] ); $update_options[ $option_name ][ $key ] = $option_value; // Single value } else { $update_options[ $value['id'] ] = $option_value; } } // Custom handling do_action( 'woocommerce_update_option', $value ); } // Now save the options foreach( $update_options as $name => $value ) update_option( $name, $value ); return true; } /** * Checks which method we're using to serve downloads * * If using force or x-sendfile, this ensures the .htaccess is in place * * @access public * @return void */ public static function check_download_folder_protection() { $upload_dir = wp_upload_dir(); $downloads_url = $upload_dir['basedir'] . '/woocommerce_uploads'; $download_method = get_option('woocommerce_file_download_method'); if ( $download_method == 'redirect' ) { // Redirect method - don't protect if ( file_exists( $downloads_url . '/.htaccess' ) ) unlink( $downloads_url . '/.htaccess' ); } else { // Force method - protect, add rules to the htaccess file if ( ! file_exists( $downloads_url . '/.htaccess' ) ) { if ( $file_handle = @fopen( $downloads_url . '/.htaccess', 'w' ) ) { fwrite( $file_handle, 'deny from all' ); fclose( $file_handle ); } } } } } endif;