* @license GPL-2.0+ * @link http://wptheming.com * @copyright 2010-2014 WP Theming * * @wordpress-plugin * Plugin Name: Options Framework * Plugin URI: http://wptheming.com * Description: A framework for building theme options. * Version: 1.9.1 * Author: Devin Price * Author URI: http://wptheming.com * License: GPL-2.0+ * License URI: http://www.gnu.org/licenses/gpl-2.0.txt * Text Domain: optionsframework * Domain Path: /languages */ // If this file is called directly, abort. if (!defined('WPINC')) { die; } // Don't load if optionsframework_init is already defined if (is_admin() && !function_exists('optionsframework_init')): function optionsframework_init() { // If user can't edit theme options, exit if (!current_user_can('edit_theme_options')) { return; } require get_template_directory() . '/inc/theme-options.php'; // Loads the required Options Framework classes. require plugin_dir_path(__FILE__) . 'includes/class-options-framework.php'; require plugin_dir_path(__FILE__) . 'includes/class-options-framework-admin.php'; require plugin_dir_path(__FILE__) . 'includes/class-options-interface.php'; require plugin_dir_path(__FILE__) . 'includes/class-options-media-uploader.php'; require plugin_dir_path(__FILE__) . 'includes/class-options-sanitization.php'; // Instantiate the options page. $options_framework_admin = new Options_Framework_Admin; $options_framework_admin->init(); // Instantiate the media uploader class $options_framework_media_uploader = new Options_Framework_Media_Uploader; $options_framework_media_uploader->init(); } add_action('init', 'optionsframework_init', 20); endif; /** * Helper function to return the theme option value. * If no value has been saved, it returns $default. * Needed because options are saved as serialized strings. * * Not in a class to support backwards compatibility in themes. */ if (!function_exists('kratos_option')): function kratos_option($name, $default = false) { /* 一次性覆盖层:只影响当前这次请求。 * * 用在「后台点测试邮件」这一种场景:那时用户刚在表单里改了 * SMTP 主机/账号/密码,但新值还没写进库(register_setting 的 * sanitize 回调返回值之后才落库)。直接读库会拿到上一次的配置, * 于是"明明填对了却发不出去"。 * * 为什么不用 update_option() 把新值先写进去:那个函数会再触发 * 一次 sanitize_option_kratos 过滤器,而写入逻辑本身就在那个 * 回调里 ⇒ 无限递归吃爆内存(3.2.11 的事故)。 * * 覆盖层只在本请求内有效、不落库、不触发任何过滤器, * 所以安全。其它场景这个全局变量根本不存在,行为与原来一致。 */ if (isset($GLOBALS['__yang_options_override']) && is_array($GLOBALS['__yang_options_override']) && array_key_exists($name, $GLOBALS['__yang_options_override'])) { return $GLOBALS['__yang_options_override'][$name]; } $option_name = 'kratos'; // Get option settings from database $options = get_option($option_name); // Return specific option if (isset($options[$name])) { return $options[$name]; } return $default; } endif; add_action('admin_init', 'optionscheck_change_santiziation', 100); function optionscheck_change_santiziation() { remove_filter('of_sanitize_textarea', 'of_sanitize_textarea'); add_filter('of_sanitize_textarea', 'custom_sanitize_textarea'); } function custom_sanitize_textarea($input) { global $allowedposttags; $custom_allowedtags["embed"] = array( "src" => array(), "type" => array(), "allowfullscreen" => array(), "allowscriptaccess" => array(), "height" => array(), "width" => array(), ); $custom_allowedtags["script"] = array("type" => array(), "src" => array()); $custom_allowedtags = array_merge($custom_allowedtags, $allowedposttags); $output = wp_kses($input, $custom_allowedtags); return $output; }