'MAKE_Settings_ThemeModInterface', 'sanitize' => 'MAKE_Settings_SanitizeInterface', 'legacy' => 'MAKE_Logo_LegacyInterface', ); /** * The default max width of the logo, in pixels * * @since 1.7.0. * * @var int */ private $default_max_width = 960; /** * Indicator of whether the hook routine has been run. * * @since 1.7.0. * * @var bool */ private static $hooked = false; /** * MAKE_Logo_Methods constructor. * * @since 1.7.0. * * @param MAKE_APIInterface|null $api * @param array $modules */ public function __construct( MAKE_APIInterface $api = null, array $modules = array() ) { // Module defaults. $modules = wp_parse_args( $modules, array( 'legacy' => 'MAKE_Logo_Legacy', ) ); /** * Filter: Switch to prevent legacy logo functionality from loading. * * @since 1.7.0. * * @param bool $load_legacy */ $load_legacy = apply_filters( 'make_logo_load_legacy', true ); if ( false === $load_legacy ) { unset( $this->dependencies['legacy'] ); } // Load dependencies parent::__construct( $api, $modules ); } /** * Hook into WordPress. * * @since 1.7.0. * * @return void */ public function hook() { if ( $this->is_hooked() ) { return; } // Logo max width add_action( 'make_style_loaded', array( $this, 'set_logo_max_width' ) ); // Logo conversion add_action( 'after_setup_theme', array( $this, 'convert_old_logo_settings' ), 30 ); // Hooking has occurred. self::$hooked = true; } /** * Check if the hook routine has been run. * * @since 1.7.0. * * @return bool */ public function is_hooked() { return self::$hooked; } /** * Test for support of the custom logo functionality introduced into Core in 4.5. * * @since 1.7.0. * * @return bool */ public function custom_logo_is_supported() { return function_exists( 'has_custom_logo' ) && current_theme_supports( 'custom-logo' ); } /** * Wrapper function to support custom logo detection either via Core or the legacy theme functionality. * * @since 1.7.0. * * @return bool */ public function has_logo() { if ( $this->custom_logo_is_supported() ) { return has_custom_logo(); } else if ( $this->has_module( 'legacy' ) ) { return $this->legacy()->has_logo(); } else { return false; } } /** * Wrapper function to support getting the custom logo markup either via Core or the legacy theme functionality. * * @since 1.7.0. * * @return string */ public function get_logo() { if ( $this->custom_logo_is_supported() && function_exists( 'get_custom_logo' ) ) { return get_custom_logo(); } else { ob_start(); ?> default_max_width; // Check for deprecated filter. if ( has_filter( 'ttfmake_custom_logo_max_width' ) ) { $this->compatibility()->deprecated_hook( 'ttfmake_custom_logo_max_width', '1.7.0', sprintf( esc_html__( 'Use the %s hook instead.', 'make' ), 'make_logo_max_width' ) ); /** * Filter the maximum allowable width for a custom logo. * * @since 1.0.0. * @deprecated 1.7.0. * * @param int $width The maximum width, in pixels. */ $width = apply_filters( 'ttfmake_custom_logo_max_width', $width ); } /** * Filter the maximum allowable width for a custom logo. * * @since 1.7.0. * * @param int $width The maximum width, in pixels. */ return apply_filters( 'make_logo_max_width', $width ); } /** * Add a style rule for the max width of the custom logo, if necessary. * * @since 1.7.0. * * @hooked action make_style_loaded * * @param MAKE_Style_ManagerInterface $style * * @return void */ public function set_logo_max_width( MAKE_Style_ManagerInterface $style ) { $max_width = absint( $this->get_logo_max_width() ); if ( $this->custom_logo_is_supported() && $this->has_logo() && $this->default_max_width !== $max_width ) { $style->css()->add( array( 'selectors' => 'img.custom-logo', 'declarations' => array( 'max-width' => "{$max_width}px", 'width' => '100%', ), ) ); } } /** * Convert the theme's legacy custom logo mods to the Core version. * * Since Core relies on one attachment for all sizes of the logo, this converter looks for a retina-sized * logo first, and falls back on the regular. This helps to ensure that the largest image size becomes * the custom logo attachment. * * @since 1.7.0. * * @hooked action after_setup_theme * * @return void */ public function convert_old_logo_settings() { // Don't bother if the Core custom logo isn't supported if ( ! $this->custom_logo_is_supported() ) { return; } // Bail if this conversion process has already been run or a Core custom logo has already been set. if ( true === get_theme_mod( 'make-logo-converted' ) || false !== get_theme_mod( 'custom_logo', false ) ) { return; } $logo_value = ''; if ( false !== $retina = get_theme_mod( 'logo-retina', false ) ) { $logo_value = $this->sanitize()->sanitize_image( $retina, true ); } else if ( false !== $regular = get_theme_mod( 'logo-regular', false ) ) { $logo_value = $this->sanitize()->sanitize_image( $regular, true ); } if ( is_int( $logo_value ) && $logo_value > 0 ) { set_theme_mod( 'custom_logo', $logo_value ); } // Add a flag that the conversion has been run. set_theme_mod( 'make-logo-converted', true ); } }