* @copyright Copyright (c) 2013, Nicolas GUILLAUME * @link http://themesandco.com/customizr * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ if ( ! class_exists( 'TC_init' ) ) : class TC_init { //declares the filtered default settings public $global_layout; public $tc_thumb_size; public $slider_full_size; public $slider_size; public $skins; public $fp_ids; public $socials; public $sidebar_widgets; public $footer_widgets; public $widgets; public $post_list_layout; public $post_formats_with_no_header; public $content_404; public $content_no_results; public $default_slides; //Access any method or var of the class with classname::$instance -> var or method(): static $instance; function __construct () { self::$instance =& $this; //Default layout settings $this -> global_layout = array( 'r' => array( 'content' => 'span9', 'sidebar' => 'span3', 'customizer' => __( 'Right sidebar' , 'customizr' ), 'metabox' => __( 'Right sidebar' , 'customizr' ), ), 'l' => array( 'content' => 'span9', 'sidebar' => 'span3', 'customizer' => __( 'Left sidebar' , 'customizr' ), 'metabox' => __( 'Left sidebar' , 'customizr' ), ), 'b' => array( 'content' => 'span6', 'sidebar' => 'span3', 'customizer' => __( '2 sidebars : Right and Left' , 'customizr' ), 'metabox' => __( '2 sidebars : Right and Left' , 'customizr' ), ), 'f' => array( 'content' => 'span12', 'sidebar' => false, 'customizer' => __( 'No sidebars : full width layout', 'customizr' ), 'metabox' => __( 'No sidebars : full width layout' , 'customizr' ), ), ); //Default images sizes $this -> tc_thumb_size = array('width' => 270 , 'height' => 250, 'crop' => true ); $this -> slider_full_size = array('width' => 9999 , 'height' => 500, 'crop' => true ); $this -> slider_size = array('width' => 1170 , 'height' => 500, 'crop' => true ); //Default skins array $this -> skins = array( 'blue.css' => __( 'Blue' , 'customizr' ), 'blue2.css' => __( 'Light blue ' , 'customizr' ), 'blue3.css' => __( 'Green blue' , 'customizr'), 'green.css' => __( 'Green' , 'customizr' ), 'green2.css' => __( 'Light green' , 'customizr'), 'yellow.css' => __( 'Yellow' , 'customizr' ), 'yellow2.css' => __( 'Flat yellow' , 'customizr' ), 'orange.css' => __( 'Orange' , 'customizr' ), 'orange2.css' => __( 'Flat orange' , 'customizr'), 'red.css' => __( 'Red' , 'customizr' ), 'red2.css' => __( 'Flat red' , 'customizr' ), 'purple.css' => __( 'Purple' , 'customizr' ), 'purple2.css' => __( 'Flat purple' , 'customizr' ), 'grey.css' => __( 'Grey' , 'customizr' ), 'grey2.css' => __( 'Ligth grey' , 'customizr' ), 'black.css' => __( 'Black' , 'customizr' ), 'black2.css' => __( 'Flat black' , 'customizr' ) ); //Default featured pages ids $this -> fp_ids = array( 'one' , 'two' , 'three' ); //Default social networks $this -> socials = array( 'tc_rss' => array( 'link_title' => __( 'Subscribe to my rss feed' , 'customizr' ), 'option_label' => __( 'RSS feed (default is the wordpress feed)' , 'customizr' ), 'default' => get_bloginfo( 'rss_url' ) ), 'tc_twitter' => array( 'link_title' => __( 'Follow me on Twitter' , 'customizr' ), 'option_label' => __( 'Twitter profile url' , 'customizr' ), 'default' => null ), 'tc_facebook' => array( 'link_title' => __( 'Follow me on Facebook' , 'customizr' ), 'option_label' => __( 'Facebook profile url' , 'customizr' ), 'default' => null ), 'tc_google' => array( 'link_title' => __( 'Follow me on Google+' , 'customizr' ), 'option_label' => __( 'Google+ profile url' , 'customizr' ), 'default' => null ), 'tc_instagram' => array( 'link_title' => __( 'Follow me on Instagram' , 'customizr' ), 'option_label' => __( 'Instagram profile url' , 'customizr' ), 'default' => null ), 'tc_wordpress' => array( 'link_title' => __( 'Follow me on WordPress' , 'customizr' ), 'option_label' => __( 'WordPress profile url' , 'customizr' ), 'default' => null ), 'tc_youtube' => array( 'link_title' => __( 'Follow me on Youtube' , 'customizr' ), 'option_label' => __( 'Youtube profile url' , 'customizr' ), 'default' => null ), 'tc_pinterest' => array( 'link_title' => __( 'Pin me on Pinterest' , 'customizr' ), 'option_label' => __( 'Pinterest profile url' , 'customizr' ), 'default' => null ), 'tc_github' => array( 'link_title' => __( 'Follow me on Github' , 'customizr' ), 'option_label' => __( 'Github profile url' , 'customizr' ), 'default' => null ), 'tc_dribbble' => array( 'link_title' => __( 'Follow me on Dribbble' , 'customizr' ), 'option_label' => __( 'Dribbble profile url' , 'customizr' ), 'default' => null ), 'tc_linkedin' => array( 'link_title' => __( 'Follow me on LinkedIn' , 'customizr' ), 'option_label' => __( 'LinkedIn profile url' , 'customizr' ), 'default' => null ) );//end of social array //Default sidebar widgets $this -> sidebar_widgets = array( 'right' => array( 'name' => __( 'Right Sidebar' , 'customizr' ), 'description' => __( 'Appears on posts, static pages, archives and search pages' , 'customizr' ) ), 'left' => array( 'name' => __( 'Left Sidebar' , 'customizr' ), 'description' => __( 'Appears on posts, static pages, archives and search pages' , 'customizr' ) ) );//end of array //Default footer widgets $this -> footer_widgets = array( 'footer_one' => array( 'name' => __( 'Footer Widget Area One' , 'customizr' ), 'description' => __( 'Just use it as you want !' , 'customizr' ) ), 'footer_two' => array( 'name' => __( 'Footer Widget Area Two' , 'customizr' ), 'description' => __( 'Just use it as you want !' , 'customizr' ) ), 'footer_three' => array( 'name' => __( 'Footer Widget Area Three' , 'customizr' ), 'description' => __( 'Just use it as you want !' , 'customizr' ) ) );//end of array //Default post list layout $this -> post_list_layout = array( 'content' => 'span8', 'thumb' => 'span4', 'show_thumb_first' => false, 'alternate' => true ); //Defines post formats with no headers $this -> post_formats_with_no_header = array( 'aside' , 'status' , 'link' , 'quote' ); //Default 404 content $this -> content_404 = array( 'quote' => __( 'Speaking the Truth in times of universal deceit is a revolutionary act.' , 'customizr' ), 'author' => __( 'George Orwell' , 'customizr' ), 'text' => __( 'Sorry, but the requested page is not found. You might try a search below.' , 'customizr' ) ); //Default no search result content $this -> content_no_results = array( 'quote' => __( 'Success is the ability to go from one failure to another with no loss of enthusiasm...' , 'customizr' ), 'author' => __( 'Sir Winston Churchill' , 'customizr' ), 'text' => __( 'Sorry, but nothing matched your search criteria. Please try again with some different keywords.' , 'customizr' ) ); //Default slides content $this -> default_slides = array( 1 => array( 'title' => '', 'text' => '', 'button_text' => '', 'link_id' => null, 'link_url' => null, 'active' => 'active', 'color_style' => '', 'slide_background' => sprintf('%2$s', TC_BASE_URL.'inc/assets/img/customizr.jpg', __( 'Customizr is a clean responsive theme' , 'customizr' ) ) ), 2 => array( 'title' => __( 'Style your WordPress site live!' , 'customizr' ), 'text' => __( 'Many layout and design options are available from the WordPress customizer screen : see your changes live !' , 'customizr' ), 'button_text' => __( 'Just try it!' , 'customizr' ), 'link_id' => null, 'link_url' => null, 'active' => '', 'color_style' => '', 'slide_background' => sprintf('%2$s', TC_BASE_URL.'inc/assets/img/phare.jpg', __( 'Style your WordPress site live!' , 'customizr' ) ) ), 3 => array( 'title' => __( 'Create beautiful sliders' , 'customizr' ), 'text' => __( 'Customizr comes with a cool slider generator : add a slider to any post or page!' , 'customizr' ), 'button_text' => __( 'Discover the features' , 'customizr' ), 'link_id' => null, 'link_url' => null, 'active' => '', 'color_style' => '', 'slide_background' => sprintf('%2$s', TC_BASE_URL.'inc/assets/img/chevrolet.jpg', __( 'Create beautiful sliders' , 'customizr' ) ) ) );///end of slides array //adds the text domain, various theme supports : editor style, automatic-feed-links, post formats, navigation menu, post-thumbnails add_action ( 'after_setup_theme' , array( $this , 'tc_customizr_setup' ) ); //adds various plugins compatibilty (Jetpack, Bbpress, Qtranslate, Woocommerce, ...) add_action ( 'after_setup_theme' , array( $this , 'tc_plugins_compatibility'), 20 ); //adds retina support for high resolution devices add_filter ( 'wp_generate_attachment_metadata' , array( $this , 'tc_add_retina_support') , 10 , 2 ); add_filter ( 'delete_attachment' , array( $this , 'tc_clean_retina_images') ); } /** * Sets up theme defaults and registers the various WordPress features * * * @package Customizr * @since Customizr 1.0 */ function tc_customizr_setup() { /* Set default content width for post images and media. */ global $content_width; if( ! isset( $content_width ) ) { $content_width = apply_filters( 'tc_content_width' , 1170 ); } /* * Makes Customizr available for translation. * Translations can be added to the /inc/lang/ directory. */ load_theme_textdomain( 'customizr' , TC_BASE . '/inc/lang' ); /* * Customizr styles the visual editor to resemble the theme style, * Loads the editor-style specific (post formats and RTL), the active skin, the user style.css */ add_editor_style( array( TC_BASE_URL.'inc/admin/css/editor-style.css', $this -> tc_active_skin() , get_stylesheet_uri() ) ); /* Adds RSS feed links to for posts and comments. */ add_theme_support( 'automatic-feed-links' ); /* This theme supports nine post formats. */ $post_formats = apply_filters( 'tc_post_formats', array( 'aside' , 'gallery' , 'link' , 'image' , 'quote' , 'status' , 'video' , 'audio' , 'chat' ) ); add_theme_support( 'post-formats' , $post_formats ); /* support for page excerpt (added in v3.0.15) */ add_post_type_support( 'page', 'excerpt' ); /* This theme uses wp_nav_menu() in one location. */ register_nav_menu( 'main' , __( 'Main Menu' , 'customizr' ) ); /* This theme uses a custom image size for featured images, displayed on "standard" posts. */ add_theme_support( 'post-thumbnails' ); //set_post_thumbnail_size( 624, 9999 ); // Unlimited height, soft crop //remove theme support => generates notice in admin @todo fix-it! /* remove_theme_support( 'custom-background' ); remove_theme_support( 'custom-header' );*/ //post thumbnails for featured pages and post lists (archive, search, ...) $tc_thumb_size = apply_filters( 'tc_thumb_size' , $this -> tc_thumb_size ); add_image_size( 'tc-thumb' , $tc_thumb_size['width'] , $tc_thumb_size['height'], $tc_thumb_size['crop'] ); //slider full width $slider_full_size = apply_filters( 'tc_slider_full_size' , $this -> slider_full_size ); add_image_size( 'slider-full' , $slider_full_size['width'] , $slider_full_size['height'], $slider_full_size['crop'] ); //slider boxed $slider_size = apply_filters( 'tc_slider_size' , $this -> slider_size ); add_image_size( 'slider' , $slider_size['width'] , $slider_size['height'], $slider_size['crop'] ); //add support for svg and svgz format in media upload add_filter( 'upload_mimes' , array( $this , 'tc_custom_mtypes' ) ); //add support for plugins (added in v3.1.0) add_theme_support( 'jetpack' ); add_theme_support( 'bbpress' ); add_theme_support( 'qtranslate' ); add_theme_support( 'woocommerce' ); //add help button to admin bar add_action ( 'wp_before_admin_bar_render' , array( $this , 'tc_add_help_button' )); //add options link to admin bar //add_action ( 'wp_before_admin_bar_render' , array( $this , 'tc_add_admin_bar_options_menu' )); } /** * Returns the active path+skin.css * * @package Customizr * @since Customizr 3.0.15 */ function tc_active_skin() { $skin = esc_attr( tc__f( '__get_option' , 'tc_skin' ) ); $skin = esc_attr( tc__f( '__get_option' , 'tc_minified_skin' ) ) ? str_replace('.css', '.min.css', $skin) : $skin; //Finds the good path : are we in a child theme and is there a skin to override? $remote_path = false; $remote_path = ( TC___::$instance -> tc_is_child() && file_exists(TC_BASE_CHILD .'inc/assets/css/' . $skin) ) ? TC_BASE_URL_CHILD .'inc/assets/css/' : $remote_path ; $remote_path = ( !$remote_path && file_exists(TC_BASE .'inc/assets/css/' . $skin) ) ? TC_BASE_URL .'inc/assets/css/' : $remote_path ; //Checks if there is a rtl version of the selected skin if needed if ('ar' == WPLANG || 'he_IL' == WPLANG) { $remote_path = ( TC___::$instance -> tc_is_child() && file_exists(TC_BASE_CHILD .'inc/assets/css/rtl/' . $skin) ) ? TC_BASE_URL_CHILD .'inc/assets/css/rtl/' : $remote_path ; $remote_path = ( !TC___::$instance -> tc_is_child() && file_exists(TC_BASE .'inc/assets/css/rtl/' . $skin) ) ? TC_BASE_URL .'inc/assets/css/rtl/' : $remote_path ; } //Defines the active skin and fallback to blue.css if needed $tc_active_skin = $remote_path ? $remote_path.$skin : TC_BASE_URL.'inc/assets/css/blue.css'; return apply_filters ( 'tc_active_skin' , $tc_active_skin ); } /** * This function handles the following plugins compatibility : Jetpack (for the carousel addon), Bbpress, Qtranslate, Woocommerce * * @package Customizr * @since Customizr 3.0.15 */ function tc_plugins_compatibility() { include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); /* JETPACK */ //adds compatibilty with the jetpack image carousel if ( current_theme_supports( 'jetpack' ) && is_plugin_active('jetpack/jetpack.php') ) { add_filter( 'tc_gallery_bool', 'disable_for_jetpack' ); function disable_for_jetpack() { return false; } } /* BBPRESS */ //if bbpress is installed and activated, we can check the existence of the contextual boolean function is_bbpress() to execute some code if ( current_theme_supports( 'bbpress' ) && is_plugin_active('bbpress/bbpress.php') ) { //disables thumbnails and excerpt for post lists add_filter( 'tc_show_post_list_thumb', 'tc_bbpress_disable_thumbnail' ); function tc_bbpress_disable_thumbnail($bool) { return ( function_exists('is_bbpress') && is_bbpress() ) ? false : $bool; } add_filter( 'tc_show_post_list_excerpt', 'tc_bbpress_disable_excerpt' ); function tc_bbpress_disable_excerpt($bool) { return ( function_exists('is_bbpress') && is_bbpress() ) ? false : $bool; } //disables Customizr author infos on forums add_filter( 'tc_show_author_metas_in_post', 'tc_bbpress_disable_author_meta' ); function tc_bbpress_disable_author_meta($bool) { return ( function_exists('is_bbpress') && is_bbpress() ) ? false : $bool; } //disables post navigation add_filter( 'tc_show_post_navigation', 'tc_bbpress_disable_post_navigation' ); function tc_bbpress_disable_post_navigation($bool) { return ( function_exists('is_bbpress') && is_bbpress() ) ? false : $bool; } //disables post metas add_filter( 'tc_show_post_metas', 'tc_bbpress_disable_post_metas' ); function tc_bbpress_disable_post_metas($bool) { return ( function_exists('is_bbpress') && is_bbpress() ) ? false : $bool; } }//end if bbpress on /* * QTranslate * Credits : @acub, http://websiter.ro */ if ( current_theme_supports( 'qtranslate' ) && is_plugin_active('qtranslate/qtranslate.php') ) { //outputs correct urls for current language : in logo, slider add_filter( 'tc_slide_link_url' , 'tc_url_lang' ); add_filter( 'tc_logo_link_url' , 'tc_url_lang'); add_filter( 'tc_fp_link_url' , 'tc_url_lang'); function tc_url_lang($url) { return ( function_exists( 'qtrans_convertURL' ) ) ? qtrans_convertURL($url) : $url; } //outputs the qtranslate translation for slider, featured pages add_filter( 'tc_slide_title', 'tc_apply_qtranslate' ); add_filter( 'tc_slide_text', 'tc_apply_qtranslate' ); add_filter( 'tc_slide_button_text', 'tc_apply_qtranslate' ); add_filter( 'tc_slide_background_alt', 'tc_apply_qtranslate' ); add_filter( 'tc_fp_text', 'tc_apply_qtranslate' ); add_filter( 'tc_fp_button_text', 'tc_apply_qtranslate' ); function tc_apply_qtranslate ($text) { return call_user_func( '__' , $text ); } //sets no character limit for slider (title, lead text and button title) and featured pages (text) => allow users to use qtranslate tags for as many languages they wants ([:en]English text[:de]German text...and so on) add_filter( 'tc_slide_title_length' , 'tc_remove_char_limit'); add_filter( 'tc_slide_text_length' , 'tc_remove_char_limit'); add_filter( 'tc_slide_button_length' , 'tc_remove_char_limit'); add_filter( 'tc_fp_text_length' , 'tc_remove_char_limit'); function tc_remove_char_limit() { return 99999; } //modify the page excerpt=> uses the wp page excerpt instead of the generated excerpt with the_content add_filter( 'tc_fp_text', 'tc_use_page_excerpt', 10, 3 ); function tc_use_page_excerpt( $featured_text , $fp_id , $page_id ) { $page = get_post($page_id); return ( empty($featured_text) && !post_password_required($page_id) ) ? strip_tags(apply_filters( 'the_content' , $page->post_excerpt )) : $featured_text ; } //modify the customizer transport from post message to null for some options add_filter( 'tc_featured_page_button_text_customizer_set' , 'tc_change_transport', 10, 2); add_filter( 'tc_featured_text_one_customizer_set' , 'tc_change_transport', 10, 2); add_filter( 'tc_featured_text_two_customizer_set' , 'tc_change_transport', 10, 2); add_filter( 'tc_featured_text_three_customizer_set' , 'tc_change_transport', 10, 2); function tc_change_transport( $value , $set ) { return ('transport' == $set) ? null : $value; } }//end Qtranslate /* Woocommerce */ if ( current_theme_supports( 'woocommerce' ) && is_plugin_active('woocommerce/woocommerce.php') ) { //unkooks the default woocommerce wrappersv and add customizr's content wrapper and action hooks remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10); remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10); add_action('woocommerce_before_main_content', 'tc_woocommerce_wrappers', 10); add_action('woocommerce_after_main_content', 'tc_woocommerce_wrappers', 10); function tc_woocommerce_wrappers() { switch ( current_filter() ) { case 'woocommerce_before_main_content': ?>
$value ) { if ( is_array( $value ) ) { foreach ( $value as $image => $attr ) { if ( is_array( $attr ) ) $this -> tc_create_retina_images( get_attached_file( $attachment_id ), $attr['width'], $attr['height'], true ); } } } return $metadata; }//end of tc_retina_support /** * Creates retina-ready images * * @package Customizr * @since Customizr 3.0.15 * @credits http://wp.tutsplus.com/author/chrisbavota/ */ function tc_create_retina_images( $file, $width, $height, $crop = false ) { if ( $width || $height ) { $resized_file = wp_get_image_editor( $file ); if ( ! is_wp_error( $resized_file ) ) { $filename = $resized_file->generate_filename( $width . 'x' . $height . '@2x' ); $resized_file->resize( $width * 2, $height * 2, $crop ); $resized_file->save( $filename ); $info = $resized_file->get_size(); return array( 'file' => wp_basename( $filename ), 'width' => $info['width'], 'height' => $info['height'], ); } } return false; }//end of function /** * This function deletes the generated retina images if they exist * * @hook delete_attachment * @package Customizr * @since Customizr 3.0.15 * @credits http://wp.tutsplus.com/author/chrisbavota/ */ function tc_clean_retina_images( $attachment_id ) { //checks if retina is enabled in options if ( 0 == tc__f( '__get_option' , 'tc_retina_support' ) ) return; $meta = wp_get_attachment_metadata( $attachment_id ); if ( !isset( $meta['file']) ) return; $upload_dir = wp_upload_dir(); $path = pathinfo( $meta['file'] ); foreach ( $meta as $key => $value ) { if ( 'sizes' === $key ) { foreach ( $value as $sizes => $size ) { $original_filename = $upload_dir['basedir'] . '/' . $path['dirname'] . '/' . $size['file']; $retina_filename = substr_replace( $original_filename, '@2x.', strrpos( $original_filename, '.' ), strlen( '.' ) ); if ( file_exists( $retina_filename ) ) unlink( $retina_filename ); } } } }//end of function /** * Add WordPress customizer page to the admin bar menu. * @package Customizr * @since Customizr 1.0 */ function tc_add_admin_bar_options_menu() { if ( current_user_can( 'edit_theme_options' ) ) { global $wp_admin_bar; $wp_admin_bar->add_menu( array( 'parent' => false, 'id' => 'tc-customizr' , 'title' => __( 'Customiz\'it!' , 'customizr' ), 'href' => admin_url( 'customize.php' ), 'meta' => array( 'title' => __( 'Customize your website at any time!', 'customizr' ), ), )); } } /** * Add help button * @package Customizr * @since Customizr 1.0 */ function tc_add_help_button() { if ( current_user_can( 'edit_theme_options' ) ) { global $wp_admin_bar; $wp_admin_bar->add_menu( array( 'parent' => 'top-secondary', // Off on the right side 'id' => 'tc-customizr-help' , 'title' => __( 'Help' , 'customizr' ), 'href' => admin_url( 'themes.php?page=welcome.php&help=true' ), 'meta' => array( 'title' => __( 'Need help with Customizr? Click here!', 'customizr' ), ), )); } } }//end of class endif;