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 .'&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
}}