'jetpack_widget_social_icons', 'description' => __( 'Add social-media icons to your site.', 'jetpack' ), 'customize_selective_refresh' => true, ); parent::__construct( 'jetpack_widget_social_icons', /** This filter is documented in modules/widgets/facebook-likebox.php */ apply_filters( 'jetpack_widget_name', __( 'Social Icons', 'jetpack' ) ), $widget_ops ); $this->defaults = array( 'title' => __( 'Follow Us', 'jetpack' ), 'icon-size' => 'medium', 'new-tab' => false, 'icons' => array( array( 'url' => '', ), ), ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) ); add_action( 'admin_print_footer_scripts', array( $this, 'render_admin_js' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_icon_scripts' ) ); add_action( 'wp_footer', array( $this, 'include_svg_icons' ), 9999 ); } /** * Script & styles for admin widget form. */ public function enqueue_admin_scripts( $hook ) { global $wp_customize; if ( isset( $wp_customize ) || 'widgets.php' === $hook ) { wp_enqueue_script( 'jetpack-widget-social-icons-script', plugins_url( 'social-icons/social-icons-admin.js', __FILE__ ), array( 'jquery-ui-sortable' ), '20170506' ); wp_enqueue_style( 'jetpack-widget-social-icons-admin', plugins_url( 'social-icons/social-icons-admin.css', __FILE__ ), array(), '20170506' ); } } /** * Styles for front-end widget. */ public function enqueue_icon_scripts() { wp_enqueue_style( 'jetpack-widget-social-icons-styles', plugins_url( 'social-icons/social-icons.css', __FILE__ ), array(), '20170506' ); } /** * JavaScript for admin widget form. */ public function render_admin_js() { global $wp_customize; global $pagenow; if ( ! isset( $wp_customize ) && 'widgets.php' !== $pagenow ) { return; } ?> id, $this->id_base, true ) ) { return; } // Define SVG sprite file in Jetpack $svg_icons = dirname( dirname( __FILE__ ) ) . '/theme-tools/social-menu/social-menu.svg'; // Define SVG sprite file in WPCOM if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { $svg_icons = dirname( dirname( __FILE__ ) ) . '/social-menu/social-menu.svg'; } // If it exists, include it. if ( is_file( $svg_icons ) ) { require_once( $svg_icons ); } } /** * Front-end display of widget. * * @see WP_Widget::widget() * * @param array $args Widget arguments. * @param array $instance Saved values from database. */ public function widget( $args, $instance ) { $instance = wp_parse_args( $instance, $this->defaults ); /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ); echo $args['before_widget']; if ( ! empty( $title ) ) { echo $args['before_title'] . esc_html( $title ) . $args['after_title']; } if ( ! empty( $instance['icons'] ) ) : // Get supported social icons. $social_icons = $this->get_supported_icons(); $default_icon = $this->get_svg_icon( array( 'icon' => 'chain' ) ); // Set target attribute for the link if ( true === $instance['new-tab'] ) { $target = '_blank'; } else { $target = '_self'; } ?> defaults['icon-size']; if ( in_array( $new_instance['icon-size'], array( 'small', 'medium', 'large' ) ) ) { $instance['icon-size'] = $new_instance['icon-size']; } $instance['new-tab'] = isset( $new_instance['new-tab'] ) ? (bool) $new_instance['new-tab'] : false; $icon_count = count( $new_instance['url-icons'] ); $instance['icons'] = array(); foreach( $new_instance['url-icons'] as $url ) { $url = filter_var( $url, FILTER_SANITIZE_URL ); if ( ! empty( $url ) ) { $instance['icons'][] = array( 'url' => $url, ); } } return $instance; } /** * Back-end widget form. * * @see WP_Widget::form() * * @param array $instance Previously saved values from database. * * @return string|void */ public function form( $instance ) { $instance = wp_parse_args( $instance, $this->defaults ); $title = sanitize_text_field( $instance['title'] ); $sizes = array( 'small' => __( 'Small', 'jetpack' ), 'medium' => __( 'Medium', 'jetpack' ), 'large' => __( 'Large', 'jetpack' ), ); $new_tab = isset( $instance['new-tab'] ) ? (bool) $instance['new-tab'] : false; ?>

$this->get_field_id( 'url-icons' ), 'url-icon-name' => $this->get_field_name( 'url-icons' ), 'url-value' => $icon['url'], ) ); } ?>

/>

'', 'url-icon-name' => '', 'url-value' => '', ); $args = wp_parse_args( $args, $defaults ); ?>

', esc_attr( $args['url-icon-id'] ), esc_attr( $args['url-icon-name'] ), esc_attr__( 'Account URL', 'jetpack' ), esc_url( $args['url-value'], array( 'http', 'https', 'mailto', 'skype' ) ) ); ?>

'', ); // Parse args. $args = wp_parse_args( $args, $defaults ); // Define an icon. if ( false === array_key_exists( 'icon', $args ) ) { return esc_html__( 'Please define an SVG icon filename.', 'jetpack' ); } // Set aria hidden. $aria_hidden = ' aria-hidden="true"'; // Begin SVG markup. $svg = ''; /* * Display the icon. * * The whitespace around `` is intentional - it is a work around to a keyboard navigation bug in Safari 10. * * See https://core.trac.wordpress.org/ticket/38387. */ $svg .= ' '; $svg .= ''; return $svg; } /** * Returns an array of supported social links (URL, icon, and label). * * @return array $social_links_icons */ public function get_supported_icons() { $social_links_icons = array( array( 'url' => '500px.com', 'icon' => '500px', 'label' => '500px', ), array( 'url' => 'amazon.cn', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'amazon.in', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'amazon.fr', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'amazon.de', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'amazon.it', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'amazon.nl', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'amazon.es', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'amazon.co', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'amazon.ca', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'amazon.com', 'icon' => 'amazon', 'label' => 'Amazon', ), array( 'url' => 'apple.com', 'icon' => 'apple', 'label' => 'Apple', ), array( 'url' => 'itunes.com', 'icon' => 'apple', 'label' => 'iTunes', ), array( 'url' => 'bandcamp.com', 'icon' => 'bandcamp', 'label' => 'Bandcamp', ), array( 'url' => 'behance.net', 'icon' => 'behance', 'label' => 'Behance', ), array( 'url' => 'codepen.io', 'icon' => 'codepen', 'label' => 'CodePen', ), array( 'url' => 'deviantart.com', 'icon' => 'deviantart', 'label' => 'DeviantArt', ), array( 'url' => 'digg.com', 'icon' => 'digg', 'label' => 'Digg', ), array( 'url' => 'dribbble.com', 'icon' => 'dribbble', 'label' => 'Dribbble', ), array( 'url' => 'dropbox.com', 'icon' => 'dropbox', 'label' => 'Dropbox', ), array( 'url' => 'etsy.com', 'icon' => 'etsy', 'label' => 'Etsy', ), array( 'url' => 'facebook.com', 'icon' => 'facebook', 'label' => 'Facebook', ), array( 'url' => '/feed/', 'icon' => 'feed', 'label' => __( 'RSS Feed', 'jetpack' ), ), array( 'url' => 'flickr.com', 'icon' => 'flickr', 'label' => 'Flickr', ), array( 'url' => 'foursquare.com', 'icon' => 'foursquare', 'label' => 'Foursquare', ), array( 'url' => 'goodreads.com', 'icon' => 'goodreads', 'label' => 'Goodreads', ), array( 'url' => 'google.com/+', 'icon' => 'google-plus', 'label' => 'Google +', ), array( 'url' => 'plus.google.com', 'icon' => 'google-plus', 'label' => 'Google +', ), array( 'url' => 'google.com', 'icon' => 'google', 'label' => 'Google', ), array( 'url' => 'github.com', 'icon' => 'github', 'label' => 'GitHub', ), array( 'url' => 'instagram.com', 'icon' => 'instagram', 'label' => 'Instagram', ), array( 'url' => 'linkedin.com', 'icon' => 'linkedin', 'label' => 'LinkedIn', ), array( 'url' => 'mailto:', 'icon' => 'mail', 'label' => __( 'Email', 'jetpack' ), ), array( 'url' => 'meetup.com', 'icon' => 'meetup', 'label' => 'Meetup', ), array( 'url' => 'medium.com', 'icon' => 'medium', 'label' => 'Medium', ), array( 'url' => 'pinterest.com', 'icon' => 'pinterest', 'label' => 'Pinterest', ), array( 'url' => 'getpocket.com', 'icon' => 'pocket', 'label' => 'Pocket', ), array( 'url' => 'reddit.com', 'icon' => 'reddit', 'label' => 'Reddit', ), array( 'url' => 'skype.com', 'icon' => 'skype', 'label' => 'Skype', ), array( 'url' => 'skype:', 'icon' => 'skype', 'label' => 'Skype', ), array( 'url' => 'slideshare.net', 'icon' => 'slideshare', 'label' => 'SlideShare', ), array( 'url' => 'snapchat.com', 'icon' => 'snapchat', 'label' => 'Snapchat', ), array( 'url' => 'soundcloud.com', 'icon' => 'soundcloud', 'label' => 'SoundCloud', ), array( 'url' => 'spotify.com', 'icon' => 'spotify', 'label' => 'Spotify', ), array( 'url' => 'stumbleupon.com', 'icon' => 'stumbleupon', 'label' => 'StumbleUpon', ), array( 'url' => 'tumblr.com', 'icon' => 'tumblr', 'label' => 'Tumblr', ), array( 'url' => 'twitch.tv', 'icon' => 'twitch', 'label' => 'Twitch', ), array( 'url' => 'twitter.com', 'icon' => 'twitter', 'label' => 'Twitter', ), array( 'url' => 'vimeo.com', 'icon' => 'vimeo', 'label' => 'Vimeo', ), array( 'url' => 'vk.com', 'icon' => 'vk', 'label' => 'VK', ), array( 'url' => 'wordpress.com', 'icon' => 'wordpress', 'label' => 'WordPress.com', ), array( 'url' => 'wordpress.org', 'icon' => 'wordpress', 'label' => 'WordPress', ), array( 'url' => 'yelp.com', 'icon' => 'yelp', 'label' => 'Yelp', ), array( 'url' => 'youtube.com', 'icon' => 'youtube', 'label' => 'YouTube', ), ); return $social_links_icons; } } // Jetpack_Widget_Social_Icons /** * Register and load the widget. * * @access public * @return void */ function jetpack_widget_social_icons_load() { register_widget( 'Jetpack_Widget_Social_Icons' ); } add_action( 'widgets_init', 'jetpack_widget_social_icons_load' );