File "functions.php"

Full path: /home/jonasls/www/wp-content/themes/proton/functions.php
File size: 0.02 KB (22.05 KB bytes)
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

// Define global theme variables
$proton_options = get_proton_options();
$proton_theme = wp_get_theme();
$proton_theme_version = $proton_theme['Version'];

// Language Setup
add_action('after_setup_theme', 'proton_language_setup');
function proton_language_setup()
{
	load_theme_textdomain('proton', get_template_directory() . '/languages');
}

add_filter('editable_roles', 'restrict_admin_count');

function restrict_admin_count($roles) {
    // On compte les administrateurs actuels
    $admin_count = count(get_users(array('role' => 'administrator')));

    // Si on a déjà 1 admin ou plus, on retire l'option "Administrateur" du menu déroulant
    if ($admin_count >= 1) {
        unset($roles['administrator']);
    }
    
    return $roles;
}

// Set max content width
if (!isset($content_width)) {
	$content_width = 1170;
}

// Get Options from Redux
function get_proton_options()
{
	$proton_options = get_option('proton_redux');

	if (!empty($proton_options)) {
		return $proton_options;
	}
}

// Get Redux Options
function proton_get_rdx_option($proton_option)
{
	global $proton_options;

	return isset($proton_options[$proton_option]) ? $proton_options[$proton_option] : null;
}

// Proton Setup
add_action('after_setup_theme', 'proton_setup');
function proton_setup()
{
	// Add theme support
	add_theme_support('menus');
	add_theme_support('post-thumbnails');
	add_theme_support('automatic-feed-links');
	add_theme_support('title-tag');
	add_theme_support('woocommerce');
	add_theme_support('wc-product-gallery-lightbox');

	// Include custom files
	require_once(get_template_directory() . '/includes/tgm.php');
	include_once(get_template_directory() . '/includes/custom-fields.php');
	include(get_template_directory() . "/includes/custom.php");
	include(get_template_directory() . "/includes/custom-fonts.php");
	// define('ACF_LITE', true);

	// Add stylesheets and scripts
	add_action('wp_enqueue_scripts', 'proton_add_external_css');
	add_action('wp_enqueue_scripts', 'proton_add_external_js');

	// Register Menus
	register_nav_menus(
		array(
			"main-menu" => "Main Menu"
		)
	);

	// Active class in header
	add_filter('nav_menu_css_class', 'proton_nav_class', 10 ,2);
	function proton_nav_class($classes, $item)
	{
		if (in_array('current-menu-item', $classes)) {
			$classes[] = 'active ';
		}
		return $classes;
	}

	// Initial the Redux Framework to Proton
	if (!isset($redux_demo) && file_exists(get_template_directory() . '/includes/options-config.php')) {
	    require_once(get_template_directory().'/includes/options-config.php');
	}

	// Set Visual Composer as part of theme
	if (function_exists('vc_map')) {
		// Include NeuronElements Params
		include_once(get_template_directory() . '/includes/vc_functions.php');

		// Disable Front End Editor
		vc_disable_frontend();

		// Set Visual Composer As Theme
		add_action('vc_before_init', 'proton_vcSetAsTheme');
		function proton_vcSetAsTheme()
		{
			vc_set_as_theme();
		}

		// Custom Style for Back End Editor
		add_action('admin_enqueue_scripts', 'proton_vc_styles');
		function proton_vc_styles()
		{
			wp_enqueue_style('proton-vc', get_template_directory_uri() .'/includes/options/vc/vc_custom.css', false, null, null);
		}
	}

	// TGMPA
	add_action('tgmpa_register', 'proton_theme_plugins');
	function proton_theme_plugins()
	{
		$plugins = array(
			array(
	            'name'      => esc_html__('Redux Framework','proton'),
	            'slug'      => 'redux-framework',
	            'required'  => true
	        ),
	        array(
	            'name'      => esc_html__('Contact Form 7','proton'),
	            'slug'      => 'contact-form-7',
	            'required'  => false
	        ),
			array(
				'name'      => esc_html__('WooCommerce','proton'),
				'slug'      => 'woocommerce',
				'required'  => false
	        ),
			array(
	        	'name'      => esc_html__('Advanced Custom Fields', 'proton'),
	            'slug'      => 'advanced-custom-fields',
				'required'  => true,
				'force_activation' => true
	        ),
			array(
	        	'name'      => esc_html__('WPBakery Page Builder(Visual Composer)', 'proton'),
	            'slug'      => 'js-composer',
				'source'    => get_template_directory() . '/includes/plugins/js_composer.zip',
	            'required'  => true
	        ),
			array(
	        	'name'      => esc_html__('ACF Repeater', 'proton'),
	            'slug'      => 'acf-repeater',
				'source'    => get_template_directory() . '/includes/plugins/acf-repeater.zip',
	            'required'  => true
	        ),
			array(
	        	'name'      => esc_html__('ACF Flexible Content', 'proton'),
	            'slug'      => 'acf-flexible-content',
				'source'    => get_template_directory() . '/includes/plugins/acf-flexible-content.zip',
	            'required'  => true
	        ),
			array(
	        	'name'      => esc_html__('Portfolio Post Type', 'proton'),
	            'slug'      => 'portfolio-post-type',
	            'required'  => true
	        ),
	    );
		$config = array(
			'id'           => 'tgmpa',
			'default_path' => '',
			'menu'         => 'tgmpa-install-plugins',
			'parent_slug'  => 'themes.php',
			'capability'   => 'edit_theme_options',
			'has_notices'  => true,
			'dismissable'  => true,
			'dismiss_msg'  => '',
			'is_automatic' => false,
			'message'      => ''
		);
	    tgmpa($plugins, $config);
	}
}

// Register Fonts
function proton_fonts_url()
{
	global $proton_options;
	$font_url = '';
	if ('off' !== _x('on', 'Google font: on or off', 'proton')) {
		if (proton_get_rdx_option('proton_style') == 'modern'){
			$font_url = add_query_arg( 'family', urlencode('Hind:300,400,500,600|Poppins:300,400,500,600' ), "//fonts.googleapis.com/css");
		} else {
			$font_url = add_query_arg( 'family', urlencode('Roboto:300,400,400i,500,700' ), "//fonts.googleapis.com/css");
		}
	}
	return $font_url;
}

function proton_add_external_css()
{
	global $proton_options, $proton_theme_version;
	// Enqueue
	wp_enqueue_style('proton-style', get_stylesheet_uri());
	wp_enqueue_style('bootstrap', get_template_directory_uri().'/assets/css/bootstrap.css', false, $proton_theme_version);
	wp_enqueue_style('font-awesome', get_template_directory_uri().'/assets/css/font-awesome.css', false, $proton_theme_version);
	wp_enqueue_style('owl-theme', get_template_directory_uri().'/assets/css/bundle.css', false, $proton_theme_version);
	if (class_exists('WooCommerce')) {
		wp_enqueue_style('woocommerce', get_template_directory_uri().'/assets/css/woocommerce.css', false, $proton_theme_version);
	}
	wp_enqueue_style('main', get_template_directory_uri().'/assets/css/style.css', false, $proton_theme_version);
	if (proton_get_rdx_option('proton_style') == 'modern'){
		wp_enqueue_style('modern', get_template_directory_uri().'/assets/css/modern.css', false, $proton_theme_version);
	}
	if (proton_get_rdx_option('proton_skin') == 'dark'){
		wp_enqueue_style('dark-skin', get_template_directory_uri().'/assets/css/dark-skin.css', false, $proton_theme_version);
	}
	wp_enqueue_style('proton-fonts', proton_fonts_url(), array(), $proton_theme_version);
}


function proton_add_external_js()
{
	global $proton_options, $proton_theme_version;
	$proton_api_key = proton_get_rdx_option('proton_api_key');
	$api_key = "AIzaSyAuaE4p3L0-Q6TXUDc4Xf9ttyCSK6779e4";

	if ($proton_api_key) {
		$api_key = $proton_api_key;
	}

	if (!is_admin()) {
		// Enqueue
		wp_enqueue_script("bootstrap", get_template_directory_uri()."/assets/js/bootstrap.js", array("jquery"), $proton_theme_version, TRUE);
		wp_enqueue_script("bundle", get_template_directory_uri()."/assets/js/bundle.js", array("jquery"), $proton_theme_version, TRUE);
		wp_enqueue_script("owl.carousel", get_template_directory_uri()."/assets/js/owl.carousel.min.js", array("jquery"), $proton_theme_version, TRUE);
		wp_enqueue_script("magnific-popup", get_template_directory_uri()."/assets/js/jquery.magnific-popup.min.js", array("jquery"), $proton_theme_version, TRUE);
		wp_enqueue_script("main", get_template_directory_uri()."/assets/js/main.js", array("jquery"), $proton_theme_version, TRUE);
		if (proton_get_rdx_option('proton_smooth_scroll')) {
			wp_enqueue_script("page-smooth-scroll", get_template_directory_uri()."/assets/js/page-smooth-scroll.js", array("jquery"), $proton_theme_version, TRUE);
		}
		if (is_singular()) {
			wp_enqueue_script("comment-reply");
		}
		wp_enqueue_script('google-maps','https://maps.googleapis.com/maps/api/js?key='. $api_key .'', array('jquery'), $proton_theme_version);
	}

}

// Favicon
if (!function_exists('wp_site_icon') || !has_site_icon()) {
	function proton_favicon()
	{
		global $proton_options;
		$proton_favicon = proton_get_rdx_option('proton_favicon');
		if ($proton_favicon) {
			$proton_favicon_url = $proton_favicon['url'];
			echo "<link rel='shortcut icon' href='$proton_favicon_url' />";
		}
	}
	add_action('wp_head', 'proton_favicon');
}

// Sidebar
add_action('widgets_init', 'proton_widgets_init');
function proton_widgets_init()
{
	global $proton_options;
    register_sidebar(
    	array(
			'name' => esc_html__('Main Sidebar', 'proton'),
			'id' => 'sidebar-1',
			'before_widget' => '<div id="%1$s" class="widget %2$s">',
			'after_widget'  => '</div>',
			'before_title'  => '<h2 class="widgettitle">',
			'after_title'   => '</h2>'
    	)
	);
	register_sidebar(
		array(
			'name' => esc_html__('Contact Sidebar', 'proton'),
			'id' => 'sidebar-2',
			'before_widget' => '<div id="%1$s" class="widget %2$s">',
			'after_widget'  => '</div>',
			'before_title'  => '<h2 class="widgettitle">',
			'after_title'   => '</h2>'
		)
	);
	if(class_exists('WooCommerce')){
		register_sidebar(
			array(
				'name' => esc_html__('Shop Sidebar','proton'),
				'id' => 'sidebar-3',
				'before_widget' => '<div id="%1$s" class="widget %2$s">',
				'after_widget'  => '</div>',
				'before_title'  => '<h2 class="widgettitle">',
				'after_title'   => '</h2>'
			)
		);
	}
	if(proton_get_rdx_option('proton_footer_widgets') == true) :
		register_sidebar(
			array(
		        'name' => esc_html__('Footer Sidebar 1', 'proton'),
		        'id' => 'footer-sidebar-1',
		        'before_widget' => '<div id="%1$s" class="widget %2$s">',
				'after_widget'  => '</div>',
				'before_title'  => '<h3>',
				'after_title'   => '</h3>'
		    )
		);
		register_sidebar(
			array(
		        'name' => esc_html__('Footer Sidebar 2', 'proton'),
		        'id' => 'footer-sidebar-2',
		        'before_widget' => '<div id="%1$s" class="widget %2$s">',
				'after_widget'  => '</div>',
				'before_title'  => '<h3>',
				'after_title'   => '</h3>'
		    )
		);
		if(proton_get_rdx_option('proton_footer_widgets_columns') == 'three' || proton_get_rdx_option('proton_footer_widgets_columns') == 'four') {
			register_sidebar(
				array(
			        'name' => esc_html__('Footer Sidebar 3', 'proton'),
			        'id' => 'footer-sidebar-3',
			        'before_widget' => '<div id="%1$s" class="widget %2$s">',
					'after_widget'  => '</div>',
					'before_title'  => '<h3>',
					'after_title'   => '</h3>'
			    )
			);
		}
		if(proton_get_rdx_option('proton_footer_widgets_columns') == 'four') {
			register_sidebar(
				array(
			        'name' => esc_html__('Footer Sidebar 4', 'proton'),
			        'id' => 'footer-sidebar-4',
			        'before_widget' => '<div id="%1$s" class="widget %2$s">',
					'after_widget'  => '</div>',
					'before_title'  => '<h3>',
					'after_title'   => '</h3>'
			    )
			);
		}
	endif;
}

// Pagination
function proton_pagination($proton_pages = '', $proton_range = 4)
{
	global $paged;
	$proton_showitems = ($proton_range * 2) + 1;

	if (empty($paged)) {
		if (get_query_var('paged')) {
			$paged = get_query_var('paged');
		} elseif (get_query_var('page')) {
			$paged = get_query_var('page');
		} else {
			$paged = 1;
		}
	}

	if ($proton_pages == '') {
		global $wp_query;
		$proton_pages = $wp_query->max_num_pages;

		if (!$proton_pages) {
			$proton_pages = 1;
		}
	}

	if (1 != $proton_pages) {
		echo "<ul class='page-pagination'>";

		for ($i = 1; $i <= $proton_pages; $i++) {
			if (1 != $proton_pages && (!($i >= $paged + $proton_range + 1 || $i <= $paged - $proton_range - 1) || $proton_pages <= $proton_showitems)) {
				echo ($paged == $i) ? "<li class=\"active\"><a>". $i ."</a></li>":"<li><a href='". get_pagenum_link($i) ."' class=\"inactive\">". $i ."</a></li>";
			}
		}

		echo "</ul>\n";
	}
}

// Ajax Mini Cart
function woocommerce_header_add_to_cart_fragment($fragments) {
    ob_start();
    ?>
        <span class="number bold">
            <?php echo sprintf('%d', WC()->cart->cart_contents_count); ?>
        </span>
    <?php
    $fragments['#minicart .number'] = ob_get_clean();
    return $fragments;
}
add_filter('woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_fragment');


// Change Excerpt length
function excerpt($limit) {
	$excerpt = explode(' ', get_the_excerpt(), $limit);
	if(count($excerpt) >= $limit) {
		array_pop($excerpt);
		$excerpt = implode(" ", $excerpt) . '...';
	} else {
		$excerpt = implode(" ", $excerpt);
	}
	$excerpt = preg_replace('`\[[^\]]*\]`','', $excerpt);
	return $excerpt;
}

// Remove redux menu under the tools
add_action('admin_menu', 'proton_remove_redux_menu', 12);
function proton_remove_redux_menu()
{
	remove_submenu_page('tools.php','redux-about');
}

function proton_removeDemoModeLink()
{
	if ( class_exists('ReduxFrameworkPlugin') ) {
	    remove_filter( 'plugin_row_meta', array( ReduxFrameworkPlugin::get_instance(), 'plugin_metalinks'), null, 2 );
	}
	if ( class_exists('ReduxFrameworkPlugin') ) {
	    remove_action('admin_notices', array( ReduxFrameworkPlugin::get_instance(), 'admin_notices' ) );
	}
}
add_action('init', 'proton_removeDemoModeLink');

// Remove Tags from Portfolio Post Type
add_action('init', 'proton_remove_portfolio_tags');
function proton_remove_portfolio_tags()
{
    unregister_taxonomy_for_object_type('portfolio_tag', 'portfolio');
}


// Map Classic
function proton_map_classic($latitude, $longitude)
{
	?>
	<script>
	    function initialize() {
	      var mapOptions = {
	        zoom: 15,
	        scrollwheel: false,
	        center: new google.maps.LatLng(<?php echo $latitude ?>, <?php echo $longitude ?>)
	      }
	      var image = '<?php echo get_template_directory_uri(); ?>/assets/images/map-marker.png';
	      var myLatLng = new google.maps.LatLng(<?php echo $latitude ?>, <?php echo $longitude ?>);
	      var map = new google.maps.Map(document.getElementById('map'),mapOptions);
	      var beachMarker = new google.maps.Marker({
	          position: myLatLng,
	          map: map,
	          icon: image
	      });
	      var myLatLng = new google.maps.LatLng(<?php echo $latitude ?>, <?php echo $longitude ?>);
	      var styles = [{"featureType":"administrative","elementType":"geometry","stylers":[{"color":"#a7a7a7"}]},{"featureType":"administrative","elementType":"labels.text.fill","stylers":[{"visibility":"on"},{"color":"#737373"}]},{"featureType":"landscape","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#efefef"}]},{"featureType":"poi","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#dadada"}]},{"featureType":"poi","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"poi","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"road","elementType":"labels.text.fill","stylers":[{"color":"#696969"}]},{"featureType":"road","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"road.highway","elementType":"geometry.fill","stylers":[{"color":"#ffffff"}]},{"featureType":"road.highway","elementType":"geometry.stroke","stylers":[{"visibility":"on"},{"color":"#b3b3b3"}]},{"featureType":"road.arterial","elementType":"geometry.fill","stylers":[{"color":"#ffffff"}]},{"featureType":"road.arterial","elementType":"geometry.stroke","stylers":[{"color":"#d6d6d6"}]},{"featureType":"road.local","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#ffffff"},{"weight":1.8}]},{"featureType":"road.local","elementType":"geometry.stroke","stylers":[{"color":"#d7d7d7"}]},{"featureType":"transit","elementType":"all","stylers":[{"color":"#808080"},{"visibility":"off"}]},{"featureType":"water","elementType":"geometry.fill","stylers":[{"color":"#d3d3d3"}]},{"featureType":"water","elementType":"labels.text","stylers":[{"color":"#000000"}]}];

	    map.setOptions({styles: styles});
	    }
	    google.maps.event.addDomListener(window, 'load', initialize);
	</script>
	<?php
}

function proton_map_modern($latitude, $longitude)
{
	?>
	<script>
	function initialize() {
	    var a = {
	        zoom: 17,
	        scrollwheel: !1,
	        center: new google.maps.LatLng(<?php echo $latitude ?>, <?php echo $longitude ?>)
	    };
	    new google.maps.Map(document.getElementById("map"), a), new google.maps.LatLng(<?php echo $latitude ?>, <?php echo $longitude ?>)
	}
	google.maps.event.addDomListener(window, "load", initialize);
	<?php
}

// Compress Text
function proton_compress($proton_input)
{
	$proton_input = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $proton_input);
	$proton_input = str_replace(array( "\r\n", "\r", "\n", "\t", '	', '	', '	' ), '', $proton_input);

	return $proton_input;
}

// Generate Custom CSS
$proton_generate_custom_css = array();
function proton_generate_custom_css($proton_css)
{
	global $proton_generate_custom_css;

	$proton_generate_custom_css[] = $proton_css;
}

function proton_generate_css()
{
	global $proton_generate_custom_css;

	if (!isset($proton_generate_custom_css)) {
		return;
	}

	echo "<style>\n" . proton_compress(implode(PHP_EOL . PHP_EOL, $proton_generate_custom_css)) . "\n</style>";
}
add_action('wp_footer', 'proton_generate_css');

// Maintenance Mode
function proton_maintenance_mode()
{
	global $current_user;

	$proton_manage_options = current_user_can('manage_options');
	$proton_coming_soon = proton_get_rdx_option('proton_coming_soon');
	$proton_maintenance_mode = proton_get_rdx_option('proton_maintenance_mode');

	if ($proton_coming_soon && $proton_manage_options == false) {
		get_template_part('templates/page-coming-soon');
		exit();
	}

	if ($proton_maintenance_mode && $proton_manage_options == false) {
		get_template_part('templates/page-maintenance');
		exit();
	}
}
add_action('template_redirect', 'proton_maintenance_mode');

// Rewrite the url of Portfolio
add_filter('portfolioposttype_args', 'proton_change_portfolio_labels');
function proton_change_portfolio_labels(array $args)
{
	$args['has_archive'] = false;
	
    return $args;
}

// Share Social Media
function proton_share_media($proton_show, $proton_type, $proton_layout, $proton_style, $proton_title, $proton_media)
{
	// Share > Enable
	if ($proton_show == false) {
		return;
	}

    $proton_media_enabled = $proton_media['enabled'];
    $proton_media_class[] = "social-icons";
    $proton_media_ul_class = array();

	$proton_social_array = array(
		'facebook' => '<i class="fa fa-facebook"></i>',
		'twitter' => '<i class="fa fa-twitter"></i>',
		'google_plus' => '<i class="fa fa-google-plus"></i>',
		'linkedin' => '<i class="fa fa-linkedin"></i>',
		'pinterest' => '<i class="fa fa-pinterest"></i>',
		'tumblr' => '<i class="fa fa-tumblr"></i>'
	);

	if ($proton_type == '2') {
		$proton_social_array = array(
			'facebook' => 'Facebook',
			'twitter' => 'Twitter',
			'google_plus' => 'Google Plus',
			'linkedin' => 'Linkedin',
			'pinterest' => 'Pinterest',
			'tumblr' => 'Tumblr'
		);
    }

	// Share > Type
	if ($proton_type == '1') {
		$proton_media_class[] = "type-icon";
	} else {
		$proton_media_class[] = "type-text";
	}

	// Share > Layout
	if ($proton_layout == '1') {
		$proton_media_class[] = "layout-normal";
	} elseif ($proton_layout == '2' && $proton_style != '4') {
		$proton_media_class[] = "layout-bg";
	}

	// Share > Style
	switch ($proton_style) {
		case '2':
			$proton_media_class[] = "colorful";
			break;
		case '3':
			$proton_media_class[] = "colorful-hover";
			break;
		case '4':
			$proton_media_class[] = "colorful-bg layout-bg";
			break;
		case '5':
			$proton_media_class[] = "colorful-underline";
			$proton_media_ul_class[] = "underline";
			break;
	}

	if ($proton_show) {
?>
	<div class="share-holder">
		<?php if ($proton_title) : ?>
			<h4><?php echo esc_attr($proton_title); ?></h4>
		<?php endif; ?>
		<div class="<?php echo esc_attr(implode(' ', $proton_media_class)) ?>">
		    <ul class="<?php echo esc_attr(implode(' ', $proton_media_ul_class)) ?>">
		        <?php
					$proton_shortTitle = get_the_title();
		            $proton_shortURL = get_permalink();

		            if ($proton_media_enabled) {
		                foreach ($proton_media_enabled as $proton_key => $proton_value) {
		                    switch ($proton_key) {
		                        case 'facebook':
		                            echo '<li><a class="facebook" href="https://www.facebook.com/sharer/sharer.php?u='. $proton_shortURL . '">'. $proton_social_array['facebook'] .'</a></li>';
		                        	break;
		                        case 'twitter':
		                            echo '<li><a class="twitter" href="https://twitter.com/intent/tweet?text='. $proton_shortTitle .'&amp;url='. $proton_shortURL.'">'. $proton_social_array['twitter'] .'</a></li>';
		                        	break;
		                        case 'google-plus':
		                            echo '<li><a class="google-plus" href="https://plus.google.com/share?url='. $proton_shortURL .'">'. $proton_social_array['google_plus'] .'</a></li>';
		                        	break;
		                        case 'linkedin':
		                            echo '<li><a class="linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url='. $proton_shortURL .'&title='. $proton_shortTitle .'">'. $proton_social_array['linkedin'] .'</a></li>';
		                        	break;
		                        case 'pinterest':
		                            echo '<li><a class="pinterest" href="https://pinterest.com/pin/create/button/?url='. $proton_shortURL .'&description='. $proton_shortTitle .'">'. $proton_social_array['pinterest'] .'</a></li>';
		                        	break;
		                        case 'tumblr':
		                            echo '<li><a class="tumblr" href="http://www.tumblr.com/share/link?url='. $proton_shortURL .'&name='. $proton_shortTitle .'">'. $proton_social_array['tumblr'] .'</a></li>';
		                        	break;
		                    }
		                }
		            }
		        ?>
		    </ul>
		</div>
	</div>
<?php
}}