* @copyright Copyright (c) 2008 - 2013, Justin Tadlock * @link http://themehybrid.com/hybrid-core * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ /* Load custom control classes. */ add_action( 'customize_register', 'hybrid_load_customize_controls', 1 ); /* Register custom sections, settings, and controls. */ add_action( 'customize_register', 'hybrid_customize_register' ); /* Add the footer content Ajax to the correct hooks. */ add_action( 'wp_ajax_hybrid_customize_footer_content', 'hybrid_customize_footer_content_ajax' ); add_action( 'wp_ajax_nopriv_hybrid_customize_footer_content', 'hybrid_customize_footer_content_ajax' ); /** * Loads framework-specific customize control classes. Customize control classes extend the WordPress * WP_Customize_Control class to create unique classes that can be used within the framework. * * @since 1.4.0 * @access private */ function hybrid_load_customize_controls() { /* Loads the textarea customize control class. */ require_once( trailingslashit( HYBRID_CLASSES ) . 'customize-control-textarea.php' ); } /** * Registers custom sections, settings, and controls for the $wp_customize instance. * * @since 1.4.0 * @access private * @param object $wp_customize */ function hybrid_customize_register( $wp_customize ) { /* Get supported theme settings. */ $supports = get_theme_support( 'hybrid-core-theme-settings' ); /* Get the theme prefix. */ $prefix = hybrid_get_prefix(); /* Get the default theme settings. */ $default_settings = hybrid_get_default_theme_settings(); /* Add the footer section, setting, and control if theme supports the 'footer' setting. */ if ( is_array( $supports[0] ) && in_array( 'footer', $supports[0] ) ) { /* Add the footer section. */ $wp_customize->add_section( 'hybrid-core-footer', array( 'title' => esc_html__( 'Footer', 'hybrid-core' ), 'priority' => 200, 'capability' => 'edit_theme_options' ) ); /* Add the 'footer_insert' setting. */ $wp_customize->add_setting( "{$prefix}_theme_settings[footer_insert]", array( 'default' => $default_settings['footer_insert'], 'type' => 'option', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'hybrid_customize_sanitize', 'sanitize_js_callback' => 'hybrid_customize_sanitize', 'transport' => 'postMessage', ) ); /* Add the textarea control for the 'footer_insert' setting. */ $wp_customize->add_control( new Hybrid_Customize_Control_Textarea( $wp_customize, 'hybrid-core-footer', array( 'label' => esc_html__( 'Footer', 'hybrid-core' ), 'section' => 'hybrid-core-footer', 'settings' => "{$prefix}_theme_settings[footer_insert]", ) ) ); /* If viewing the customize preview screen, add a script to show a live preview. */ if ( $wp_customize->is_preview() && !is_admin() ) add_action( 'wp_footer', 'hybrid_customize_preview_script', 21 ); } } /** * Sanitizes the footer content on the customize screen. Users with the 'unfiltered_html' cap can post * anything. For other users, wp_filter_post_kses() is ran over the setting. * * @since 1.4.0 * @access public * @param mixed $setting The current setting passed to sanitize. * @param object $object The setting object passed via WP_Customize_Setting. * @return mixed $setting */ function hybrid_customize_sanitize( $setting, $object ) { /* Get the theme prefix. */ $prefix = hybrid_get_prefix(); /* Make sure we kill evil scripts from users without the 'unfiltered_html' cap. */ if ( "{$prefix}_theme_settings[footer_insert]" == $object->id && !current_user_can( 'unfiltered_html' ) ) $setting = stripslashes( wp_filter_post_kses( addslashes( $setting ) ) ); /* Return the sanitized setting and apply filters. */ return apply_filters( "{$prefix}_customize_sanitize", $setting, $object ); } /** * Runs the footer content posted via Ajax through the do_shortcode() function. This makes sure the * shortcodes are output correctly in the live preview. * * @since 1.4.0 * @access private */ function hybrid_customize_footer_content_ajax() { /* Check the AJAX nonce to make sure this is a valid request. */ check_ajax_referer( 'hybrid_customize_footer_content_nonce' ); /* If footer content has been posted, run it through the do_shortcode() function. */ if ( isset( $_POST['footer_content'] ) ) echo do_shortcode( wp_kses_stripslashes( $_POST['footer_content'] ) ); /* Always die() when handling Ajax. */ die(); } /** * Handles changing settings for the live preview of the theme. * * @since 1.4.0 * @access private */ function hybrid_customize_preview_script() { /* Create a nonce for the Ajax. */ $nonce = wp_create_nonce( 'hybrid_customize_footer_content_nonce' ); ?>