File: /var/www/ecom/wp-content/themes/electro/inc/functions/extras.php
<?php
/**
* Additional functions used by the theme
*/
/**
* Call a shortcode function by tag name.
*
* @param string $tag The shortcode whose function to call.
* @param array $atts The attributes to pass to the shortcode function. Optional.
* @param array $content The shortcode's content. Default is null (none).
*
* @return string|bool False on failure, the result of the shortcode on success.
*/
function electro_do_shortcode( $tag, array $atts = array(), $content = null ) {
global $shortcode_tags;
if ( ! isset( $shortcode_tags[ $tag ] ) ) {
return false;
}
if ( $tag == 'products' && ! isset( $atts['orderby'] ) ) {
$atts['orderby'] = 'post__in';
}
return call_user_func( $shortcode_tags[ $tag ], $atts, $content, $tag );
}
if ( ! function_exists( 'is_electro_customizer_enabled' ) ) {
/**
* Check whether the Electro Customizer settings are enabled
* @return boolean
*/
function is_electro_customizer_enabled() {
return apply_filters( 'electro_customizer_enabled', true );
}
}
if ( ! function_exists( 'electro_page_menu_args' ) ) {
/**
* Get our wp_nav_menu() fallback, wp_page_menu(), to show a home link.
*
* @param array $args Configuration arguments.
* @return array
*/
function electro_page_menu_args( $args ) {
$args['show_home'] = true;
return $args;
}
}
/**
* Enables template debug mode
*/
function electro_template_debug_mode() {
if ( ! defined( 'ELECTRO_TEMPLATE_DEBUG_MODE' ) ) {
$status_options = get_option( 'woocommerce_status_options', array() );
if ( ! empty( $status_options['template_debug_mode'] ) && current_user_can( 'manage_options' ) ) {
define( 'ELECTRO_TEMPLATE_DEBUG_MODE', true );
} else {
define( 'ELECTRO_TEMPLATE_DEBUG_MODE', false );
}
}
}
/**
* Get other templates (e.g. product attributes) passing attributes and including the file.
*
* @access public
* @param string $template_name
* @param array $args (default: array())
* @param string $template_path (default: '')
* @param string $default_path (default: '')
* @return void
*/
function electro_get_template( $template_name, $args = array(), $template_path = '', $default_path = '' ) {
if ( $args && is_array( $args ) ) {
extract( $args );
}
$located = electro_locate_template( $template_name, $template_path, $default_path );
if ( ! file_exists( $located ) ) {
_doing_it_wrong( __FUNCTION__, sprintf( '<code>%s</code> does not exist.', $located ), '2.1' );
return;
}
// Allow 3rd party plugin filter template file from their plugin
$located = apply_filters( 'electro_get_template', $located, $template_name, $args, $template_path, $default_path );
do_action( 'electro_before_template_part', $template_name, $template_path, $located, $args );
include( $located );
do_action( 'electro_after_template_part', $template_name, $template_path, $located, $args );
}
/**
* Locate a template and return the path for inclusion.
*
* This is the load order:
*
* yourtheme / $template_path / $template_name
* yourtheme / $template_name
* $default_path / $template_name
*
* @access public
* @param string $template_name
* @param string $template_path (default: '')
* @param string $default_path (default: '')
* @return string
*/
function electro_locate_template( $template_name, $template_path = '', $default_path = '' ) {
if ( ! $template_path ) {
$template_path = 'templates/';
}
if ( ! $default_path ) {
$default_path = 'templates/';
}
// Look within passed path within the theme - this is priority
$template = locate_template(
array(
trailingslashit( $template_path ) . $template_name,
$template_name
)
);
// Get default template
if ( ! $template || ELECTRO_TEMPLATE_DEBUG_MODE ) {
$template = $default_path . $template_name;
}
// Return what we found
return apply_filters( 'electro_locate_template', $template, $template_name, $template_path );
}
if ( ! function_exists( 'electro_get_social_networks' ) ) {
/**
* List of all available social networks
*
* @return array array of all social networks and its details
*/
function electro_get_social_networks() {
return apply_filters( 'electro_get_social_networks', array(
'facebook' => array(
'label' => esc_html__( 'Facebook', 'electro' ),
'icon' => 'fab fa-facebook',
'id' => 'facebook_link',
'link' => '#',
),
'twitter' => array(
'label' => esc_html__( 'Twitter', 'electro' ),
'icon' => 'fab fa-twitter',
'id' => 'twitter_link',
'link' => '#',
),
'whatsapp-mobile' => array(
'label' => esc_html__( 'Whatsapp Mobile', 'electro' ),
'icon' => 'fab fa-whatsapp mobile',
'id' => 'whatsapp_mobile_link',
),
'whatsapp-desktop' => array(
'label' => esc_html__( 'Whatsapp Desktop', 'electro' ),
'icon' => 'fab fa-whatsapp desktop',
'id' => 'whatsapp_desktop_link',
),
'pinterest' => array(
'label' => esc_html__( 'Pinterest', 'electro' ),
'icon' => 'fab fa-pinterest',
'id' => 'pinterest_link',
'link' => '#',
),
'linkedin' => array(
'label' => esc_html__( 'LinkedIn', 'electro' ),
'icon' => 'fab fa-linkedin',
'id' => 'linkedin_link',
'link' => '#',
),
'googleplus' => array(
'label' => esc_html__( 'Google+', 'electro' ),
'icon' => 'fab fa-google-plus',
'id' => 'googleplus_link',
'link' => '#',
),
'tumblr' => array(
'label' => esc_html__( 'Tumblr', 'electro' ),
'icon' => 'fab fa-tumblr',
'id' => 'tumblr_link'
),
'instagram' => array(
'label' => esc_html__( 'Instagram', 'electro' ),
'icon' => 'fab fa-instagram',
'id' => 'instagram_link'
),
'tiktok' => array(
'label' => esc_html__( 'TikTok', 'electro' ),
'icon' => 'fab fa-tiktok',
'id' => 'tiktok_link'
),
'youtube' => array(
'label' => esc_html__( 'Youtube', 'electro' ),
'icon' => 'fab fa-youtube',
'id' => 'youtube_link'
),
'vimeo' => array(
'label' => esc_html__( 'Vimeo', 'electro' ),
'icon' => 'fab fa-vimeo-square',
'id' => 'vimeo_link'
),
'dribbble' => array(
'label' => esc_html__( 'Dribbble', 'electro' ),
'icon' => 'fab fa-dribbble',
'id' => 'dribbble_link',
'link' => '#',
),
'stumbleupon' => array(
'label' => esc_html__( 'StumbleUpon', 'electro' ),
'icon' => 'fab fa-stumbleupon',
'id' => 'stumble_upon_link'
),
'soundcloud' => array(
'label' => esc_html__('Sound Cloud', 'electro'),
'id' => 'soundcloud_link',
'icon' => 'fab fa-soundcloud',
),
'vine' => array(
'label' => esc_html__('Vine', 'electro'),
'id' => 'vine_link',
'icon' => 'fab fa-vine',
),
'vk' => array(
'label' => esc_html__('VKontakte', 'electro'),
'id' => 'vk_link',
'icon' => 'fab fa-vk',
),
'telegram' => array(
'label' => esc_html__('Telegram', 'electro'),
'id' => 'telegram_link',
'icon' => 'fab fa-telegram',
),
'rss' => array(
'label' => esc_html__( 'RSS', 'electro' ),
'icon' => 'fas fa-rss',
'id' => 'rss_link',
'link' => get_bloginfo( 'rss2_url' ),
)
) );
}
}
/**
* Query WooCommerce activation
*/
if ( ! function_exists( 'is_woocommerce_activated' ) ) {
function is_woocommerce_activated() {
return class_exists( 'woocommerce' ) ? true : false;
}
}
if ( ! function_exists( 'electro_is_woocommerce_activated' ) ) {
function electro_is_woocommerce_activated() {
return class_exists( 'woocommerce' ) ? true : false;
}
}
if ( ! function_exists( 'is_dokan_activated' ) ) {
function is_dokan_activated() {
return class_exists( 'WeDevs_Dokan' ) ? true : false;
}
}
if ( ! function_exists( 'is_dokan_pro_activated' ) ) {
function is_dokan_pro_activated() {
return class_exists( 'Dokan_Pro' ) ? true : false;
}
}
/**
* Check if Visual Composer is activated
*/
if( ! function_exists( 'is_vc_activated' ) ) {
function is_vc_activated() {
return class_exists( 'WPBakeryVisualComposerAbstract' ) ? true : false;
}
}
/**
* Check if Elementor is activated
*/
if( ! function_exists( 'is_elementor_activated' ) ) {
function is_elementor_activated() {
return did_action( 'elementor/loaded' ) ? true : false;
}
}
/**
* Check if Redux Framework is activated
*/
if( ! function_exists( 'is_redux_activated' ) ) {
function is_redux_activated() {
return class_exists( 'ReduxFrameworkPlugin' ) ? true : false;
}
}
/**
* Query WooCommerce Extension Activation.
* @var $extension main extension class name
* @return boolean
*/
function is_woocommerce_extension_activated( $extension ) {
if( is_woocommerce_activated() ) {
$is_activated = class_exists( $extension ) ? true : false;
} else {
$is_activated = false;
}
return $is_activated;
}
/**
* Checks if YITH Wishlist is activated
*
* @return boolean
*/
if( ! function_exists( 'is_yith_wcwl_activated' ) ) {
function is_yith_wcwl_activated() {
return is_woocommerce_extension_activated( 'YITH_WCWL' );
}
}
/**
* Checks if YITH WooCompare is activated
*
* @return boolean
*/
if( ! function_exists( 'is_yith_woocompare_activated' ) ) {
function is_yith_woocompare_activated() {
return is_woocommerce_extension_activated( 'YITH_Woocompare' );
}
}
/**
* Checks if YITH WooCommerce Zoom Magnifier is activated
*
* @return boolean
*/
if( ! function_exists( 'is_yith_zoom_magnifier_activated' ) ) {
function is_yith_zoom_magnifier_activated() {
return is_woocommerce_extension_activated( 'YITH_WooCommerce_Zoom_Magnifier' );
}
}
/**
* Checks if WooCommerce PayPal Checkout Gateway is activated
*
* @return boolean
*/
if( ! function_exists( 'is_wc_gateway_ppec' ) ) {
function is_wc_gateway_ppec() {
return is_woocommerce_extension_activated( 'WC_GATEWAY_PPEC' );
}
}
/**
* Checks if WooCommerce simple auction is activated
*
* @return boolean
*/
if( ! function_exists( 'is_wc_simple_auction_activated' ) ) {
function is_wc_simple_auction_activated() {
return is_woocommerce_extension_activated( 'WooCommerce_simple_auction' );
}
}
/**
* Checks if WPML is activated
*
* @return boolean
*/
if( ! function_exists( 'is_wpml_activated' ) ) {
function is_wpml_activated() {
return function_exists( 'icl_object_id' ) && class_exists('SitePress');
}
}
if ( ! function_exists( 'is_yith_wcan_activated' ) ) {
function is_yith_wcan_activated() {
return function_exists( 'YITH_WCAN' );
}
}
/**
* Checks if WooCommerce Product Reviews Pro is activated
*
* @return boolean
*/
if( ! function_exists( 'is_wc_product_reviews_activated' ) ) {
function is_wc_product_reviews_activated() {
return is_woocommerce_extension_activated( 'WC_Product_Reviews_Pro' );
}
}
/**
* Checks if Revslider is activated
*
* @return boolean
*/
if( ! function_exists( 'is_revslider_activated' ) ) {
function is_revslider_activated() {
return function_exists( 'putRevSlider' );
}
}
if( ! function_exists( 'is_ocdi_activated' ) ) {
/**
* Check if One Click Demo Import is activated
*/
function is_ocdi_activated() {
return class_exists( 'OCDI_Plugin' ) ? true : false;
}
}
/**
* Clean variables using sanitize_text_field.
* @param string|array $var
* @return string|array
*/
function electro_clean( $var ) {
return is_array( $var ) ? array_map( 'electro_clean', $var ) : sanitize_text_field( $var );
}
/**
* Clean variables using wp_kses_post.
* @param string|array $var
* @return string|array
*/
function electro_clean_kses_post( $var ) {
return is_array( $var ) ? array_map( 'electro_clean_kses_post', $var ) : wp_kses_post( stripslashes( $var ) );
}
if ( ! function_exists( 'electro_pr' ) ) {
function electro_pr( $var ) {
echo '<pre>' . print_r( $var, 1 ) . '</pre>';
}
}
/*function electro_x_kses_allow_data_attributes() {
global $allowedposttags;
$tags = array( 'a' );
$new_attributes = array(
'data-product_sku' => true,
'data-product_id' => true,
'data-product-id' => true,
'data-product-type' => true,
'data-quantity' => true,
);
foreach ( $tags as $tag ) {
if ( isset( $allowedposttags[ $tag ] ) && is_array( $allowedposttags[ $tag ] ) ) {
$allowedposttags[ $tag ] = array_merge( $allowedposttags[ $tag ], $new_attributes );
}
}
}*/
add_filter( 'wp_kses_allowed_html', 'electro_add_data_attr', 10, 2 );
function electro_add_data_attr( $allowed, $context ) {
if ( is_array( $context ) ) {
return $allowed;
}
if ( $context === 'post' ) {
$allowed['a']['data-product_sku'] = true;
$allowed['a']['data-product_id'] = true;
$allowed['a']['data-product-id'] = true;
$allowed['a']['data-product-type'] = true;
$allowed['a']['data-quantity'] = true;
}
return $allowed;
}
if ( ! function_exists( 'electro_is_yith_multistep_checkout_activated' ) ) {
function electro_is_yith_multistep_checkout_activated() {
return function_exists( 'YITH_Multistep_Checkout' ) && YITH_Multistep_Checkout()->is_plugin_enabled;
}
}
if ( ! function_exists( 'electro_is_prdctfltr_activated' ) ) {
function electro_is_prdctfltr_activated() {
return function_exists( 'Prdctfltr' );
}
}
/*
* Remove action of anonymous class object
*/
if ( ! function_exists( 'electro_remove_class_action' ) ) {
function electro_remove_class_action( $hook_name = '', $class_name = '', $method_name = '', $priority = 10 ) {
global $wp_filter;
// Take only filters on right hook name and priority
if ( ! isset( $wp_filter[ $hook_name ][ $priority ] ) || ! is_array( $wp_filter[ $hook_name ][ $priority ] ) ) {
return false;
}
// Loop on filters registered
foreach ( (array) $wp_filter[ $hook_name ][ $priority ] as $unique_id => $filter_array ) {
// Test if filter is an array ! (always for class/method)
if ( isset( $filter_array['function'] ) && is_array( $filter_array['function'] ) ) {
// Test if object is a class, class and method is equal to param !
if ( is_object( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) == $class_name && $filter_array['function'][1] == $method_name ) {
// Test for WordPress >= 4.7 WP_Hook class (https://make.wordpress.org/core/2016/09/08/wp_hook-next-generation-actions-and-filters/)
if ( is_a( $wp_filter[ $hook_name ], 'WP_Hook' ) ) {
unset( $wp_filter[ $hook_name ]->callbacks[ $priority ][ $unique_id ] );
} else {
unset( $wp_filter[ $hook_name ][ $priority ][ $unique_id ] );
}
}
}
}
return false;
}
}