File "functions.php"
Full Path: /var/www/bvnghean.vn/save_bvnghean.vn/wp-content/themes/publisher/includes/functions.php
File size: 69.66 KB
MIME-type: text/x-php
Charset: utf-8
<?php
$template_directory = trailingslashit( get_template_directory() );
$template_uri = trailingslashit( get_template_directory_uri() );
if ( ! defined( 'PUBLISHER_THEME_ADMIN_ASSETS_URI' ) ) {
define( 'PUBLISHER_THEME_ADMIN_ASSETS_URI', $template_uri . 'includes/admin-assets/' );
}
if ( ! defined( 'PUBLISHER_THEME_PATH' ) ) {
define( 'PUBLISHER_THEME_PATH', $template_directory );
}
if ( ! defined( 'PUBLISHER_THEME_URI' ) ) {
define( 'PUBLISHER_THEME_URI', $template_uri );
}
add_filter( 'publisher-theme-core/config', 'publisher_config_theme_core', 22, 3 );
if ( ! function_exists( 'publisher_config_theme_core' ) ) {
/**
* Callback: Config "Publisher Theme Core" library needle sections.
* Filter: publisher-theme-core/config
*
* @param array $config
*
* @return array
*/
function publisher_config_theme_core( $config = array() ) {
$config['dir-path'] = PUBLISHER_THEME_PATH . 'includes/libs/bs-theme-core/';
$config['dir-url'] = PUBLISHER_THEME_URI . 'includes/libs/bs-theme-core/';
$config['theme-slug'] = 'publisher';
$config['theme-name'] = __( 'Publisher', 'publisher' );
$config['sections']['attr'] = TRUE;
$config['sections']['meta-tags'] = TRUE;
$config['sections']['listing-pagin'] = TRUE;
$config['sections']['translation'] = TRUE;
$config['sections']['social-meta-tags'] = TRUE;
$config['sections']['chat-format'] = TRUE;
$config['sections']['duplicate-posts'] = TRUE;
$config['sections']['gallery-slider'] = TRUE;
$config['sections']['shortcodes-placeholder'] = is_user_logged_in();
$config['sections']['editor-shortcodes'] = TRUE;
$config['sections']['theme-helpers'] = TRUE;
$config['sections']['vc-helpers'] = TRUE;
$config['sections']['version-compatibility'] = TRUE;
$config['sections']['rebuild-thumbnails'] = TRUE;
$config['vc-widgets-atts'] = array(
'before_title' => '<h5 class="widget-heading"><span class="h-text">',
'after_title' => '</span></h5>',
'before_widget' => '<div id="%1$s" class="widget vc-widget %2$s">',
'after_widget' => '</div>',
);
return $config;
}
}
// Init BetterTranslation for theme
add_filter( 'publisher-theme-core/translation/config', 'publisher_translations_config' );
if ( ! function_exists( 'publisher_translations_config' ) ) {
/**
* Callback: Publisher Translation configurations
*
* Filter: better-translation/config
*
* @param $config
*
* @return mixed
*/
function publisher_translations_config( $config ) {
$config['theme-id'] = 'publisher';
$config['theme-name'] = 'Publisher';
$config['notice-icon'] = PUBLISHER_THEME_URI . 'images/admin/notice-logo.png';
$config['menu-parent'] = 'bs-product-pages-welcome';
$config['menu-position'] = '3.4';
return $config;
} // publisher_translations_config
}
// Init BetterTranslation for theme
add_filter( 'publisher-theme-core/translation/languages', 'publisher_translations_languages' );
if ( ! function_exists( 'publisher_translations_languages' ) ) {
/**
* Callback: Publisher Translation languages
*
* Filter: better-translation/languages
*
* @param $languages
*
* @return mixed
*/
function publisher_translations_languages( $languages ) {
include PUBLISHER_THEME_PATH . 'includes/options/translation-languages.php';
return $languages;
} // publisher_translations_languages
}
/**
* functions.php
*---------------------------
* This file contains general functions that used inside theme to
* do important sections.
*
* We create them in a way that you can override them in child them simply!
* Simply copy the function into child theme and remove the "if( ! function_exists( '*****' ) ){".
*/
/**
* Callback: Enable oculus error logging system for theme
* Filter : better-framework/oculus/logger/filter
*
* @access private
*
* @param boolean $bool previous value
* @param string $product_dir
* @param string $type_dir
*
* @return bool true if error belongs to theme, previous value otherwise.
*/
function publisher_return_true_for_themes( $bool, $product_dir, $type_dir ) {
if ( $type_dir === 'themes' ) {
return FALSE;
}
return $bool;
}
add_filter( 'better-framework/oculus/logger/turn-off', 'publisher_return_true_for_themes', 22, 3 );
if ( ! function_exists( 'publisher_get_theme_panel_id' ) ) {
/**
* Used to get theme panel id
*
* @return string
*/
function publisher_get_theme_panel_id() {
return 'bs_' . 'publisher_theme_options';
}
}
// Config demos
include $template_directory . 'includes/demos/init.php';
// Initialize styles
include $template_directory . 'includes/styles/init.php';
if ( ! function_exists( 'publisher_cat_main_slider_config' ) ) {
/**
* Prepare main slider config
*
* @return array|mixed
*/
function publisher_cat_main_slider_config( $term_id = NULL ) {
// return from cache
if ( publisher_get_global( 'cat-slider-config' ) != NULL ) {
return publisher_get_global( 'cat-slider-config' );
}
if ( is_null( $term_id ) ) {
$term_id = get_queried_object()->term_id;
}
$config = array(
'type' => 'default',
'style' => 'default',
'overlay' => 'default',
'show' => FALSE,
'in-column' => FALSE,
);
// get from current term
if ( is_category() ) {
$config['type'] = bf_get_term_meta( 'slider_type', $term_id );
}
// slider Type
if ( $config['type'] == 'default' ) {
$config['type'] = publisher_get_option( 'cat_slider' );
}
if ( ! publisher_is_valid_slider_type( $config['type'] ) ) {
$config['type'] = 'disable';
}
switch ( $config['type'] ) {
case 'disable':
$config['style'] = 'disable';
$config['directory'] = '';
$config['file'] = '';
$config['show'] = FALSE;
$config['posts'] = 0;
break;
case 'custom-blocks':
// get from current term
if ( is_category() ) {
$config['style'] = bf_get_term_meta( 'better_slider_style', $term_id );
$config['overlay'] = bf_get_term_meta( 'better_slider_gradient', $term_id );
}
// Slider style
if ( $config['style'] == 'default' ) {
$config['style'] = publisher_get_option( 'cat_top_posts' );
}
// overlay
if ( $config['overlay'] == 'default' ) {
$config['overlay'] = publisher_get_option( 'cat_top_posts_gradient' );
}
// Validate it
if ( ! publisher_is_valid_topposts_style( $config['style'] ) ) {
$config['style'] = 'disable';
}
// Posts config
switch ( $config['style'] ) {
case 'style-1':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-1';
$config['show'] = TRUE;
$config['posts'] = 4;
$config['in-column'] = FALSE;
break;
case 'style-2':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-1';
$config['show'] = TRUE;
$config['posts'] = 4;
$config['in-column'] = TRUE;
break;
case 'style-3':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-2';
$config['show'] = TRUE;
$config['posts'] = 5;
$config['in-column'] = FALSE;
break;
case 'style-4':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-2';
$config['show'] = TRUE;
$config['posts'] = 5;
$config['in-column'] = TRUE;
break;
case 'style-5':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-3';
$config['show'] = TRUE;
$config['posts'] = 3;
$config['columns'] = 3;
$config['in-column'] = FALSE;
break;
case 'style-6':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-3';
$config['show'] = TRUE;
$config['posts'] = 2;
$config['columns'] = 2;
$config['in-column'] = TRUE;
break;
case 'style-7':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-4';
$config['show'] = TRUE;
$config['posts'] = 4;
$config['columns'] = 4;
$config['in-column'] = FALSE;
break;
case 'style-8':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-4';
$config['show'] = TRUE;
$config['posts'] = 3;
$config['columns'] = 3;
$config['in-column'] = TRUE;
break;
case 'style-9':
$config['directory'] = 'shortcodes';
$config['file'] = 'bs-slider-1';
$config['show'] = TRUE;
$config['posts'] = 3;
$config['columns'] = '';
$config['in-column'] = FALSE;
break;
case 'style-10':
$config['directory'] = 'shortcodes';
$config['file'] = 'bs-slider-1';
$config['show'] = TRUE;
$config['posts'] = 3;
$config['columns'] = '';
$config['in-column'] = TRUE;
break;
case 'style-11':
$config['directory'] = 'shortcodes';
$config['file'] = 'bs-slider-2';
$config['show'] = TRUE;
$config['posts'] = 3;
$config['columns'] = '';
$config['in-column'] = FALSE;
break;
case 'style-12':
$config['directory'] = 'shortcodes';
$config['file'] = 'bs-slider-2';
$config['show'] = TRUE;
$config['posts'] = 3;
$config['columns'] = '';
$config['in-column'] = TRUE;
break;
case 'style-13':
$config['directory'] = 'shortcodes';
$config['file'] = 'bs-slider-3';
$config['show'] = TRUE;
$config['posts'] = 3;
$config['columns'] = '';
$config['in-column'] = FALSE;
break;
case 'style-14':
$config['directory'] = 'shortcodes';
$config['file'] = 'bs-slider-3';
$config['show'] = TRUE;
$config['posts'] = 3;
$config['columns'] = '';
$config['in-column'] = TRUE;
break;
case 'style-15':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-5';
$config['show'] = TRUE;
$config['posts'] = 5;
$config['columns'] = '';
$config['in-column'] = FALSE;
break;
case 'style-16':
$config['directory'] = 'loop';
$config['file'] = 'listing-modern-grid-5';
$config['show'] = TRUE;
$config['posts'] = 3;
$config['columns'] = '';
$config['in-column'] = TRUE;
break;
default:
$config['type'] = 'disable';
$config['style'] = 'disable';
$config['directory'] = '';
$config['file'] = '';
$config['show'] = FALSE;
$config['posts'] = 0;
}
break;
case 'rev_slider':
// get from current term
if ( is_category() ) {
$config['style'] = bf_get_term_meta( 'rev_slider_item', $term_id, 'default' );
}
// Slider style
if ( $config['style'] == 'default' || empty( $config['style'] ) ) {
$config['style'] = publisher_get_option( 'cat_rev_slider_item' );
}
// determine show
if ( ! empty( $config['style'] ) && function_exists( 'putRevSlider' ) ) {
$config['show'] = TRUE;
}
$config['in-column'] = FALSE;
break;
}
// Save it to cache
publisher_set_global( 'cat-slider-config', $config );
return $config;
} // publisher_cat_main_slider_config
} // if
if ( ! function_exists( 'publisher_listing_social_share' ) ) {
/**
* Prints listing share buttons
*
* @param null $label
* @param string $class
* @param bool $show_title
*/
function publisher_listing_social_share( $label = NULL, $class = '', $show_title = FALSE ) {
$sites = publisher_get_option( 'social_share_sites' );
if ( is_null( $label ) ) {
$label = '<i class="fa fa-share-alt"></i>';
}
?>
<div class="post-share <?php echo esc_attr( $class ); ?>">
<span class="share-handler"><?php echo wp_kses( $label, bf_trans_allowed_html() ); ?></span>
<ul class="social-list clearfix">
<?php
foreach ( (array) $sites as $site_key => $site ) {
if ( $site ) {
echo publisher_shortcode_social_share_get_li( $site_key, $show_title );
}
}
?>
</ul>
</div>
<?php
} // publisher_listing_social_share
} // publisher_listing_social_share
if ( ! function_exists( 'publisher_layout_option_list' ) ) {
/**
* Panels layout field options
*
* @param bool $default
*
* @return array
*/
function publisher_layout_option_list( $default = FALSE ) {
$option = array();
if ( $default ) {
$option['default'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/layout-default.png',
'label' => __( '-- Default --', 'publisher' ),
);
}
$option['1-col'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/layout-1-col.png',
'label' => __( 'Full Width', 'publisher' ),
);
$option['2-col-right'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/layout-2-col-right.png',
'label' => __( 'Right Sidebar', 'publisher' ),
);
$option['2-col-left'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/layout-2-col-left.png',
'label' => __( 'Left Sidebar', 'publisher' ),
);
return $option;
} // publisher_layout_option_list
} // if
if ( ! function_exists( 'publisher_is_valid_layout' ) ) {
/**
* Check the parameter is theme valid layout or not!
*
* This is because of multiple theme that have same page_layout id for page layout
*
* @param $layout
*
* @return bool
*/
function publisher_is_valid_layout( $layout ) {
$valid = array(
'1-col' => '',
'2-col-left' => '',
'2-col-right' => '',
);
return isset( $valid[ $layout ] );
} // publisher_is_valid_layout
} // if
if ( ! function_exists( 'publisher_get_page_boxed_layout' ) ) {
/**
* Used to get current page boxed layout
*
* @return bool|mixed|null|string|void
*/
function publisher_get_page_boxed_layout() {
$layout = '';
if ( is_category() ) {
$layout = bf_get_term_meta( 'layout_style' );
$bg_img = bf_get_term_meta( 'bg_image' );
if ( ! empty( $bg_img['img'] ) ) {
$layout = 'boxed';
}
}
if ( empty( $layout ) || $layout == FALSE || $layout == 'default' ) {
$layout = publisher_get_option( 'layout_style' );
if ( $layout == 'full-width' ) {
$bg_img = publisher_get_option( 'site_bg_image' );
if ( ! empty( $bg_img['img'] ) ) {
$layout = 'boxed';
}
}
}
return $layout;
}
}
if ( ! function_exists( 'publisher_get_page_layout' ) ) {
/**
* Used to get current page layout
*
* @return bool|mixed|null|string|void
*/
function publisher_get_page_layout() {
// Return from cache
if ( publisher_get_global( 'page-layout' ) ) {
return publisher_get_global( 'page-layout' );
}
$layout = 'default';
// Homepage layout
if ( is_home() ) {
$layout = publisher_get_option( 'home_layout' );
} // Post Layout
elseif ( is_singular( 'post' ) ) {
$layout = bf_get_post_meta( 'page_layout' );
if ( $layout == 'default' ) {
$layout = publisher_get_option( 'post_layout' );
}
} // Page Layout
elseif ( is_page() ) {
$layout = bf_get_post_meta( 'page_layout' );
if ( $layout == 'default' ) {
$layout = publisher_get_option( 'page_layout' );
}
} // Category Layout
elseif ( is_category() ) {
$layout = bf_get_term_meta( 'page_layout' );
if ( $layout == 'default' ) {
$layout = publisher_get_option( 'cat_layout' );
}
} // Tag Layout
elseif ( is_tag() ) {
$layout = bf_get_term_meta( 'page_layout' );
if ( $layout == 'default' ) {
$layout = publisher_get_option( 'tag_layout' );
}
} // Author Layout
elseif ( is_author() ) {
$layout = bf_get_user_meta( 'page_layout' );
if ( $layout == 'default' ) {
$layout = publisher_get_option( 'author_layout' );
}
} // Search Layout
elseif ( is_search() ) {
$layout = publisher_get_option( 'search_layout' );
} // bbPress Layout
elseif ( is_post_type_archive( 'forum' ) || is_singular( 'forum' ) || is_singular( 'topic' ) ) {
$layout = publisher_get_option( 'bbpress_layout' );
} // Attachments
elseif ( is_attachment() ) {
$layout = publisher_get_option( 'attachment_layout' );
} // WooCommerce
elseif ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) {
if ( is_shop() ) {
$layout = bf_get_post_meta( 'page_layout', wc_get_page_id( 'shop' ) );
} elseif ( is_product() ) {
$layout = bf_get_post_meta( 'page_layout', get_the_ID() );
} elseif ( is_cart() ) {
$layout = bf_get_post_meta( 'page_layout', wc_get_page_id( 'cart' ) );
} elseif ( is_checkout() ) {
$layout = bf_get_post_meta( 'page_layout', wc_get_page_id( 'checkout' ) );
} elseif ( is_account_page() ) {
$layout = bf_get_post_meta( 'page_layout', wc_get_page_id( 'myaccount' ) );
} elseif ( is_product_category() || is_product_tag() ) {
$layout = bf_get_term_meta( 'page_layout', get_queried_object()->term_id );
}
if ( $layout == 'default' ) {
$layout = publisher_get_option( 'shop_layout' );
}
}
// Return default
if ( $layout == 'default' || ! publisher_is_valid_layout( $layout ) ) {
$layout = publisher_get_option( 'general_layout' );
}
// Cache
publisher_set_global( 'page-layout', $layout );
return $layout;
} // publisher_get_page_layout
}// if
if ( ! function_exists( 'publisher_listing_option_list' ) ) {
/**
* Panels posts listing field option
*
* @param bool $default
*
* @return array
*/
function publisher_listing_option_list( $default = FALSE ) {
$option = array();
if ( $default ) {
$option['default'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-default.png',
'label' => __( '-- Default --', 'publisher' ),
);
}
$option['grid-1'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-grid-1.png',
'label' => __( 'Grid 1', 'publisher' ),
);
$option['grid-1-3'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-grid-1-3.png',
'label' => __( 'Grid 1 - 3 Column', 'publisher' ),
);
$option['grid-2'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-grid-2.png',
'label' => __( 'Grid 2', 'publisher' ),
);
$option['grid-2-3'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-grid-2-3.png',
'label' => __( 'Grid 2 - 3 Column', 'publisher' ),
);
$option['blog-1'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-blog-1.png',
'label' => __( 'Blog 1', 'publisher' ),
);
$option['blog-2'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-blog-2.png',
'label' => __( 'Blog 2', 'publisher' ),
);
$option['blog-3'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-blog-3.png',
'label' => __( 'Blog 3', 'publisher' ),
);
$option['blog-4'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-blog-4.png',
'label' => __( 'Blog 4', 'publisher' ),
);
$option['blog-5'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-blog-5.png',
'label' => __( 'Blog 5', 'publisher' ),
);
$option['classic-1'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-classic-1.png',
'label' => __( 'Classic 1', 'publisher' ),
);
$option['classic-2'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-classic-2.png',
'label' => __( 'Classic 2', 'publisher' ),
);
$option['classic-3'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-classic-3.png',
'label' => __( 'Classic 3', 'publisher' ),
);
$option['tall-1'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-tall-1.png',
'label' => __( 'Tall 1', 'publisher' ),
);
$option['tall-1-4'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-tall-1-4.png',
'label' => __( 'Tall 1 - 4 Column', 'publisher' ),
);
$option['tall-2'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-tall-2.png',
'label' => __( 'Tall 2', 'publisher' ),
);
$option['tall-2-4'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-tall-2-4.png',
'label' => __( 'Tall 2 - 4 Column', 'publisher' ),
);
$option['mix-4-1'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-mix-4-1.png',
'label' => __( 'Mix 10', 'publisher' ),
);
$option['mix-4-2'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-mix-4-2.png',
'label' => __( 'Mix 11', 'publisher' ),
);
$option['mix-4-3'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-mix-4-3.png',
'label' => __( 'Mix 12', 'publisher' ),
);
$option['mix-4-4'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-mix-4-4.png',
'label' => __( 'Mix 13', 'publisher' ),
);
$option['mix-4-5'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-mix-4-5.png',
'label' => __( 'Mix 14', 'publisher' ),
);
$option['mix-4-6'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-mix-4-6.png',
'label' => __( 'Mix 15', 'publisher' ),
);
$option['mix-4-7'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-mix-4-7.png',
'label' => __( 'Mix 16', 'publisher' ),
);
$option['mix-4-8'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/listing-mix-4-8.png',
'label' => __( 'Mix 17', 'publisher' ),
);
return $option;
} // publisher_listing_option_list
} // if
if ( ! function_exists( 'publisher_is_valid_listing' ) ) {
/**
* Checks parameter to be a theme valid listing
*
* @param $listing
*
* @return bool
*/
function publisher_is_valid_listing( $listing ) {
return array_key_exists( $listing, publisher_listing_option_list() );
} // publisher_is_valid_listing
} // if
if ( ! function_exists( 'publisher_get_page_listing' ) ) {
/**
* Used to get current page posts listing
*
* @param WP_Query|null $wp_query
*
* @return mixed|string
*/
function publisher_get_page_listing( $wp_query = NULL ) {
if ( is_null( $wp_query ) ) {
$wp_query = publisher_get_query();
}
// Return from cache
if ( publisher_get_global( 'page-listing' ) ) {
return publisher_get_global( 'page-listing' );
}
$listing = 'default';
// Homepage listing
if ( $wp_query->is_home ) {
$listing = publisher_get_option( 'home_listing' );
} // Category Layout
elseif ( $wp_query->is_category ) {
$listing = bf_get_term_meta( 'page_listing', $wp_query->get_queried_object_id() );
if ( $listing == 'default' ) {
$listing = publisher_get_option( 'cat_listing' );
}
} // Tag Layout
elseif ( $wp_query->is_tag ) {
$listing = bf_get_term_meta( 'page_listing', $wp_query->get_queried_object_id() );
if ( $listing == 'default' ) {
$listing = publisher_get_option( 'tag_listing' );
}
} // Author Layout
elseif ( $wp_query->is_author ) {
$listing = bf_get_user_meta( 'page_listing', $wp_query->get_queried_object() );
if ( $listing == 'default' ) {
$listing = publisher_get_option( 'author_listing' );
}
} // Search Layout
elseif ( $wp_query->is_search ) {
$listing = publisher_get_option( 'search_listing' );
}
// check to be valid theme listing or use default
if ( $listing == 'default' || ! publisher_is_valid_listing( $listing ) ) {
$listing = publisher_get_option( 'general_listing' );
}
switch ( $listing ) {
case 'grid-1';
publisher_set_prop( 'listing-class', 'columns-2' );
break;
case 'grid-1-3';
publisher_set_prop( 'listing-class', 'columns-3' );
$listing = 'grid-1';
break;
case 'grid-2';
publisher_set_prop( 'listing-class', 'columns-2' );
break;
case 'grid-2-3';
publisher_set_prop( 'listing-class', 'columns-3' );
$listing = 'grid-2';
break;
case 'tall-1';
publisher_set_prop( 'listing-class', 'columns-3' );
break;
case 'tall-1-4';
publisher_set_prop( 'listing-class', 'columns-4' );
$listing = 'tall-1';
break;
case 'tall-2';
publisher_set_prop( 'listing-class', 'columns-3' );
break;
case 'tall-2-4';
publisher_set_prop( 'listing-class', 'columns-4' );
$listing = 'tall-2';
break;
}
// Cache
publisher_set_global( 'page-listing', 'listing-' . $listing );
return 'listing-' . $listing;
} // publisher_get_page_listing
} // if
if ( ! function_exists( 'publisher_pagination_option_list' ) ) {
/**
* Panels archives pagination field options
*
* @param bool $default
*
* @return array
*/
function publisher_pagination_option_list( $default = FALSE ) {
$option = array();
if ( $default ) {
$option['default'] = __( '-- Default pagination --', 'publisher' );
}
// simple paginations
$option['numbered'] = __( 'Numbered pagination buttons', 'publisher' );
$option['links'] = __( 'Newer & Older buttons', 'publisher' );
// advanced ajax pagination
$option['ajax_next_prev'] = __( 'Ajax - Next Prev buttons', 'publisher' );
$option['ajax_more_btn'] = __( 'Ajax - Load more button', 'publisher' );
$option['ajax_more_btn_infinity'] = __( 'Ajax - Load more button + Infinity loading', 'publisher' );
$option['ajax_infinity'] = __( 'Ajax - Infinity loading', 'publisher' );
return $option;
} // publisher_pagination_option_list
} // if
if ( ! function_exists( 'publisher_is_valid_pagination' ) ) {
/**
* Checks parameter to be a theme valid pagination
*
* @param $pagination
*
* @return bool
*/
function publisher_is_valid_pagination( $pagination ) {
return array_key_exists( $pagination, publisher_pagination_option_list() );
} // publisher_is_valid_pagination
} // if
if ( ! function_exists( 'publisher_get_pagination_style' ) ) {
/**
* Used to get current page pagination style
*/
function publisher_get_pagination_style() {
// Return from cache
if ( publisher_get_global( 'page-pagination' ) ) {
return publisher_get_global( 'page-pagination' );
}
$pagination = 'default';
$paged = bf_get_query_var_paged();
// Homepage pagination
if ( is_home() ) {
$pagination = publisher_get_option( 'home_pagination_type' );
} // Categories pagination
elseif ( is_category() ) {
$pagination = bf_get_term_meta( 'term_pagination_type' );
if ( $pagination == 'default' ) {
$pagination = publisher_get_option( 'cat_pagination_type' );
}
} // Tags pagination
elseif ( is_tag() ) {
$pagination = bf_get_term_meta( 'term_pagination_type' );
if ( $pagination == 'default' ) {
$pagination = publisher_get_option( 'tag_pagination_type' );
}
} // Author pagination
elseif ( is_author() ) {
$pagination = bf_get_user_meta( 'author_pagination_type' );
if ( $pagination == 'default' ) {
$pagination = publisher_get_option( 'author_pagination_type' );
}
} // Search page pagination
elseif ( is_search() ) {
$pagination = publisher_get_option( 'search_pagination_type' );
}
// fix for when request is from robots,
// e.g. user agent: 'Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)'
// fix for when paged and is ajax pagination then it should show simple numbered pagination
$ajax_pagins = array(
'ajax_infinity' => '',
'ajax_more_btn' => '',
'ajax_next_prev' => '',
'ajax_more_btn_infinity' => '',
);
if (
( $paged > 1 && isset( $ajax_pagins[ $pagination ] ) ) ||
( bf_is_crawler() && $ajax_pagins[ $pagination ] )
) {
$pagination = 'numbered';
}
unset( $ajax_pagins ); // clear memory
// get default pagination
if ( $pagination == 'default' ) {
$pagination = publisher_get_option( 'pagination_type' );
}
// check to be valid theme pagination
if ( ! publisher_is_valid_pagination( $pagination ) ) {
$pagination = key( publisher_pagination_option_list() );
}
// Cache
publisher_set_global( 'page-pagination', $pagination );
return $pagination;
} // publisher_get_pagination_style
}
if ( ! function_exists( 'publisher_header_style_option_list' ) ) {
/**
* Panels header style field options
*
* @param bool $default
*
* @return array
*/
function publisher_header_style_option_list( $default = FALSE ) {
$option = array();
if ( $default ) {
$option['default'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/header-default.png',
'label' => __( '-- Default --', 'publisher' ),
);
}
$option['style-1'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/header-style-1.png',
'label' => __( 'Style 1', 'publisher' ),
);
$option['style-2'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/header-style-2.png',
'label' => __( 'Style 2', 'publisher' ),
);
$option['style-3'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/header-style-3.png',
'label' => __( 'Style 3', 'publisher' ),
);
$option['style-4'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/header-style-4.png',
'label' => __( 'Style 4', 'publisher' ),
);
$option['style-5'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/header-style-5.png',
'label' => __( 'Style 5', 'publisher' ),
);
$option['style-6'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/header-style-6.png',
'label' => __( 'Style 6', 'publisher' ),
);
$option['style-7'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/header-style-7.png',
'label' => __( 'Style 7', 'publisher' ),
);
$option['style-8'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/header-style-8.png',
'label' => __( 'Style 8', 'publisher' ),
);
return $option;
} // publisher_header_style_option_list
} // if
if ( ! function_exists( 'publisher_topposts_option_list' ) ) {
/**
* Panels category toposts field options
*
* @param bool $default
*
* @return array
*/
function publisher_topposts_option_list( $default = FALSE ) {
$option = array();
if ( $default ) {
$option['default'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-default.png',
'label' => __( '-- Default --', 'publisher' ),
);
}
$option['style-1'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-1.png',
'label' => __( 'Style 1', 'publisher' ),
);
$option['style-2'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-2.png',
'label' => __( 'Style 2', 'publisher' ),
);
$option['style-3'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-3.png',
'label' => __( 'Style 3', 'publisher' ),
);
$option['style-4'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-4.png',
'label' => __( 'Style 4', 'publisher' ),
);
$option['style-5'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-5.png',
'label' => __( 'Style 5', 'publisher' ),
);
$option['style-6'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-6.png',
'label' => __( 'Style 6', 'publisher' ),
);
$option['style-7'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-7.png',
'label' => __( 'Style 7', 'publisher' ),
);
$option['style-8'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-8.png',
'label' => __( 'Style 8', 'publisher' ),
);
$option['style-9'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-9.png',
'label' => __( 'Style 9', 'publisher' ),
);
$option['style-10'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-10.png',
'label' => __( 'Style 10', 'publisher' ),
);
$option['style-11'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-11.png',
'label' => __( 'Style 11', 'publisher' ),
);
$option['style-12'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-12.png',
'label' => __( 'Style 12', 'publisher' ),
);
$option['style-13'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-13.png',
'label' => __( 'Style 13', 'publisher' ),
);
$option['style-14'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-14.png',
'label' => __( 'Style 14', 'publisher' ),
);
$option['style-15'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-15.png',
'label' => __( 'Style 15', 'publisher' ),
);
$option['style-16'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/cat-slider-style-16.png',
'label' => __( 'Style 16', 'publisher' ),
);
return $option;
} // publisher_topposts_option_list
} // if
if ( ! function_exists( 'publisher_is_valid_topposts_style' ) ) {
/**
* Check the parameter is theme valid topposts style
*
* @param $layout
*
* @return bool
*/
function publisher_is_valid_topposts_style( $layout ) {
return array_key_exists( $layout, publisher_topposts_option_list() );
} // publisher_is_valid_topposts_style
} // if
if ( ! function_exists( 'publisher_slider_types_option_list' ) ) {
/**
* Panels category slider field options
*
* @param bool $default
*
* @return array
*/
function publisher_slider_types_option_list( $default = FALSE ) {
$option = array();
if ( $default ) {
$option['default'] = __( '-- Default --', 'publisher' );
}
$option['disable'] = __( 'Disabled', 'publisher' );
$option['custom-blocks'] = __( 'Top posts', 'publisher' );
$option['rev_slider'] = __( 'Slider Revolution', 'publisher' );
return $option;
} // publisher_slider_types_option_list
} // if
if ( ! function_exists( 'publisher_is_valid_slider_type' ) ) {
/**
* Check the parameter is theme valid slider type
*
* @param $layout
*
* @return bool
*/
function publisher_is_valid_slider_type( $layout ) {
return ( is_string( $layout ) || is_int( $layout ) ) &&
array_key_exists( $layout, publisher_slider_types_option_list() );
} // publisher_is_valid_slider_type
} // if
if ( ! function_exists( 'publisher_get_header_style' ) ) {
/**
* Used to get current page header style
*
* @return bool|mixed|null|string
*/
function publisher_get_header_style() {
$style = 'default';
if ( is_category() ) {
$style = bf_get_term_meta( 'header_style' );
} elseif ( is_singular( 'page' ) ) {
$style = bf_get_post_meta( 'header_style' );;
}
if ( $style == 'default' || ! publisher_is_valid_header_style( $style ) ) {
$style = publisher_get_option( 'header_style' );
}
return $style;
} // publisher_get_header_style
} // if
if ( ! function_exists( 'publisher_is_valid_header_style' ) ) {
/**
* Check the parameter is theme valid layout or not!
*
* This is because of multiple theme that have same header_style id for page headers
*
* @param $layout
*
* @return bool
*/
function publisher_is_valid_header_style( $layout ) {
return ( is_string( $layout ) || is_int( $layout ) ) &&
array_key_exists( $layout, publisher_header_style_option_list() );
} // publisher_is_valid_header_style
} // if
if ( ! function_exists( 'publisher_get_header_layout' ) ) {
/**
* Returns header layout for current page
*
* @return bool
*/
function publisher_get_header_layout() {
// Return from cache
if ( publisher_get_global( 'header-layout' ) ) {
return publisher_get_global( 'header-layout' );
}
$layout = 'default';
if ( is_category() ) {
$layout = bf_get_term_meta( 'header_layout' );
} elseif ( is_singular( 'page' ) ) {
$layout = bf_get_post_meta( 'header_layout' );
}
if ( $layout == 'default' ) {
$layout = publisher_get_option( 'header_layout' );
}
// Cache
publisher_set_global( 'header-layout', $layout );
return $layout;
} // publisher_get_header_layout
}
// Add filter for VC elements add-on
add_filter( 'better-framework/shortcodes/title', 'publisher_bf_shortcodes_title' );
if ( ! function_exists( 'publisher_bf_shortcodes_title' ) ) {
/**
* Filter For Generating BetterFramework Shortcodes Title
*
* @param $atts
*
* @return mixed
*/
function publisher_bf_shortcodes_title( $atts ) {
// Icon
if ( ! empty( $atts['icon'] ) ) {
$icon = bf_get_icon_tag( $atts['icon'] ) . ' ';
} else {
$icon = '';
}
// Title link
if ( ! empty( $atts['title_link'] ) ) {
$link = $atts['title_link'];
} elseif ( ! empty( $atts['category'] ) ) {
$link = get_category_link( $atts['category'] );
if ( empty( $atts['title'] ) ) {
$cat = get_category( $atts['category'] );
$atts['title'] = $cat->name;
}
} elseif ( ! empty( $atts['tag'] ) ) {
$link = get_tag_link( $atts['tag'] );
if ( empty( $atts['title'] ) ) {
$tag = get_tag( $atts['tag'] );
$atts['title'] = $tag->name;
}
} else {
$link = '';
}
if ( empty( $atts['title'] ) ) {
$atts['title'] = publisher_translation_get( 'recent_posts' );
}
?>
<h3 class="section-heading">
<?php if ( ! empty( $link ) ){ ?>
<a href="<?php echo esc_url( $link ); ?>">
<?php } ?>
<span class="h-text"><?php echo $icon . esc_html( $atts['title'] ); // $icon escaped before ?></span>
<?php if ( ! empty( $link ) ){ ?>
</a>
<?php } ?>
</h3>
<?php
}
} // if
if ( ! function_exists( 'publisher_block_create_query_args' ) ) {
/**
* Handy function to create master listing query args
*
* todo remove this!
*
* @param $$atts
*
* @return bool
*/
function publisher_block_create_query_args( &$atts ) {
$args = array(
'post_type' => array( 'post' ),
'order' => $atts['order'],
'orderby' => $atts['order_by'],
);
// Category
if ( ! empty( $atts['category'] ) ) {
$args['cat'] = $atts['category'];
}
// Tag
if ( $atts['tag'] ) {
$args['tag__and'] = explode( ',', $atts['tag'] );
}
// Post id filters
if ( ! empty( $atts['post_ids'] ) ) {
$post_id_array = explode( ',', $atts['post_ids'] );
$post_in = array();
$post_not_in = array();
// Split ids into post_in and post_not_in
foreach ( $post_id_array as $post_id ) {
$post_id = trim( $post_id );
if ( is_numeric( $post_id ) ) {
if ( intval( $post_id ) < 0 ) {
$post_not_in[] = str_replace( '-', '', $post_id );
} else {
$post_in[] = $post_id;
}
}
}
if ( ! empty( $post_not_in ) ) {
$wp_query_args['post__not_in'] = $post_not_in;
}
if ( ! empty( $post_in ) ) {
$args['post__in'] = $post_in;
$args['orderby'] = 'post__in';
}
}
// Custom post types
if ( $atts['post_type'] ) {
$args['post_type'] = explode( ',', $atts['post_type'] );
}
if ( ! empty( $atts['count'] ) && intval( $atts['count'] ) > 0 ) {
$args['posts_per_page'] = $atts['count'];
} else {
switch ( $atts['style'] ) {
//
// Grid Listing
//
case 'listing-grid':
switch ( $atts['columns'] ) {
case 1:
$args['posts_per_page'] = 4;
break;
case 2:
$args['posts_per_page'] = 4;
break;
case 3:
$args['posts_per_page'] = 6;
break;
case 4:
$args['posts_per_page'] = 8;
break;
default:
$args['posts_per_page'] = 6;
break;
}
break;
//
// Thumbnail Listing 1
//
case 'listing-thumbnail-1':
switch ( $atts['columns'] ) {
case 1:
$args['posts_per_page'] = 4;
break;
case 2:
$args['posts_per_page'] = 6;
break;
case 3:
$args['posts_per_page'] = 9;
break;
case 4:
$args['posts_per_page'] = 12;
break;
default:
$args['posts_per_page'] = 6;
break;
}
break;
//
// Thumbnail Listing 2
//
case 'listing-thumbnail-2':
$args['posts_per_page'] = 4;
break;
//
// Blog Listing
//
case 'listing-blog':
switch ( $atts['columns'] ) {
case 1:
$args['posts_per_page'] = 4;
break;
case 2:
$args['posts_per_page'] = 6;
break;
case 3:
$args['posts_per_page'] = 9;
break;
case 4:
$args['posts_per_page'] = 12;
break;
default:
$args['posts_per_page'] = 6;
break;
}
break;
//
// mix Listing
//
case 'listing-mix-1-1':
$args['posts_per_page'] = 5;
break;
case 'listing-mix-1-2':
$args['posts_per_page'] = 5;
break;
case 'listing-mix-1-3':
$args['posts_per_page'] = 7;
break;
case 'listing-mix-2-1':
$args['posts_per_page'] = 8;
break;
case 'listing-mix-2-2':
$args['posts_per_page'] = 10;
break;
case 'listing-mix-3-1':
$args['posts_per_page'] = 4;
break;
case 'listing-mix-3-2':
$args['posts_per_page'] = 5;
break;
case 'listing-mix-3-3':
$args['posts_per_page'] = 5;
break;
//
// Text Listing 1
//
case 'listing-text-1':
switch ( $atts['columns'] ) {
case 1:
$args['posts_per_page'] = 3;
break;
case 2:
$args['posts_per_page'] = 6;
break;
case 3:
$args['posts_per_page'] = 9;
break;
case 4:
$args['posts_per_page'] = 12;
break;
default:
$args['posts_per_page'] = 3;
break;
}
break;
//
// Text Listing 2
//
case 'listing-text-2':
switch ( $atts['columns'] ) {
case 1:
$args['posts_per_page'] = 4;
break;
case 2:
$args['posts_per_page'] = 8;
break;
case 3:
$args['posts_per_page'] = 12;
break;
case 4:
$args['posts_per_page'] = 16;
break;
default:
$args['posts_per_page'] = 4;
break;
}
break;
//
// Modern Grid Listing
//
case 'modern-grid-listing-1':
$args['posts_per_page'] = 4;
break;
case 'modern-grid-listing-2':
$args['posts_per_page'] = 5;
break;
case 'modern-grid-listing-3':
$args['posts_per_page'] = 3;
break;
default:
$args['posts_per_page'] = 6;
}
}
/*
compatibility for better reviews
if( $atts['order_by'] == 'reviews' ){
$args['orderby'] = 'date';
$args['meta_key'] = '_bs_review_enabled';
$args['meta_value'] = '1';
}
*/
// Order by views count
if ( $atts['order_by'] == 'views' ) {
$args['meta_key'] = 'better-views-count';
$args['orderby'] = 'meta_value_num';
}
// Time filter
if ( $atts['time_filter'] != '' ) {
$args['date_query'] = publisher_get_time_filter_query( $atts['time_filter'] );
}
return $args;
}
}
if ( ! function_exists( 'publisher_block_create_tabs' ) ) {
/**
* Handy function to create master listing tabs
*
* @param $atts
*
* todo check time filter and order by
*
* @return array
*/
function publisher_block_create_tabs( &$atts ) {
// 1. collect all tabs array
// 2. chose to be tab or single column
// 3. print it
$tabs = array();
$active = TRUE; // flag to identify the main tab
//
// First tab ( main )
//
if ( ! empty( $atts['category'] ) ) {
$cat = get_category( $atts['category'] );
// is valid category
if ( $cat && ! is_wp_error( $cat ) ) {
if ( empty( $atts['title'] ) ) {
$atts['title'] = $cat->name;
}
// Icon
if ( ! empty( $atts['icon'] ) ) {
$icon = bf_get_icon_tag( $atts['icon'] ) . ' ';
} else {
$icon = '';
}
$tabs[] = array(
'title' => $atts['title'],
'link' => get_category_link( $atts['category'] ),
'type' => 'category',
'term_id' => $atts['category'],
'id' => 'tab-' . rand( 1, 9999999 ),
'icon' => $icon,
'class' => 'main-term-' . $atts['category'],
'active' => $active,
);
$active = FALSE; // only one active
} // not valid category -> default tab
else {
$tabs[] = publisher_block_create_tabs_default_tab( $atts, $active );
$active = FALSE; // only one active
}
} elseif ( ! empty( $atts['tag'] ) ) {
$tags = explode( ',', $atts['tag'] );
$tag = FALSE;
foreach ( $tags as $_tag ) {
$tag = get_tag( $_tag );
if ( $tag && ! is_wp_error( $tag ) ) {
break;
}
}
if ( $tag && ! is_wp_error( $tag ) ) {
if ( empty( $atts['title'] ) ) {
$atts['title'] = $tag->name;
}
// Icon
if ( ! empty( $atts['icon'] ) ) {
$icon = bf_get_icon_tag( $atts['icon'] ) . ' ';
} else {
$icon = '';
}
$tabs[] = array(
'title' => $atts['title'],
'link' => get_tag_link( $tag->term_id ),
'type' => 'tag',
'term_id' => $tag->term_id,
'id' => 'tab-' . rand( 1, 9999999 ),
'icon' => $icon,
'class' => 'main-term-none',
'active' => $active,
);
$active = FALSE; // only one active
} // not valid tag -> default tab
else {
$tabs[] = publisher_block_create_tabs_default_tab( $atts, $active );
$active = FALSE; // only one active
}
} // default tab
else {
$tabs[] = publisher_block_create_tabs_default_tab( $atts, $active );
$active = FALSE; // only one active
}
// not return other tabs if they will not shown!
if ( ( ! empty( $atts['hide_title'] ) && $atts['hide_title'] ) ||
( ! empty( $atts['show_title'] ) && ! $atts['show_title'] )
) {
return $tabs;
}
//
// Other Tabs
//
if ( isset( $atts['tabs'] ) && ! empty( $atts['tabs'] ) ) {
switch ( $atts['tabs'] ) {
//
// Category tabs
//
case 'cat_filter':
if ( empty( $atts['tabs_cat_filter'] ) ) {
break;
} else if ( is_string( $atts['tabs_cat_filter'] ) ) {
$atts['tabs_cat_filter'] = explode( ',', $atts['tabs_cat_filter'] );
}
foreach ( $atts['tabs_cat_filter'] as $term_id ) {
$_term = get_category( $term_id );
if ( ! is_object( $_term ) || is_wp_error( $_term ) ) {
continue;
}
$tabs[] = array(
'title' => $_term->name,
'link' => get_category_link( $term_id ),
'type' => 'category',
'term_id' => $term_id,
'id' => 'tab-' . rand( 1, 9999999 ),
'icon' => '',
'class' => 'main-term-' . $term_id,
'active' => $active,
);
// only one active
if ( $active ) {
$active = FALSE;
}
}
break;
case 'sub_cat_filter':
if ( ! empty( $atts['category'] ) ) {
$cat = get_category( $atts['category'] );
if ( ! is_object( $cat ) || is_wp_error( $cat ) ) {
continue;
}
$categories = get_categories( array( 'child_of' => $cat->term_id, 'number' => 20 ) );
foreach ( $categories as $_cat ) {
$tabs[] = array(
'title' => $_cat->name,
'link' => get_category_link( $_cat ),
'type' => 'category',
'term_id' => $_cat->term_id,
'id' => 'tab-' . rand( 1, 9999999 ),
'icon' => '',
'class' => 'main-term-' . $_cat->term_id,
'active' => $active,
);
// only one active
if ( $active ) {
$active = FALSE;
}
}
}
break;
}
}
return $tabs;
} // publisher_block_create_tabs
}
if ( ! function_exists( 'publisher_block_create_tabs_default_tab' ) ) {
/**
* Handy internal function to get default tab from atts
*
* @param $atts
* @param bool $active
*
* @return array
*/
function publisher_block_create_tabs_default_tab( &$atts, $active = TRUE ) {
if ( empty( $atts['title'] ) ) {
$atts['title'] = publisher_translation_get( 'recent_posts' );
}
// Icon
if ( ! empty( $atts['icon'] ) ) {
$icon = bf_get_icon_tag( $atts['icon'] ) . ' ';
} else {
$icon = '';
}
return array(
'title' => $atts['title'],
'link' => '',
'type' => 'custom',
'term_id' => '',
'id' => 'tab-' . rand( 1, 9999999 ),
'icon' => $icon,
'class' => 'main-term-none',
'active' => $active,
);
}
}
if ( ! function_exists( 'publisher_block_the_heading' ) ) {
/**
* Handy function to create master listing tabs
*
* @param $tabs
* @param $multi_tab
*
* @return bool
*/
function publisher_block_the_heading( &$atts, &$tabs, $multi_tab = FALSE ) {
$show_title = TRUE;
if ( ! Better_Framework::widget_manager()->get_current_sidebar() ) {
if ( ! empty( $atts['hide_title'] ) && $atts['hide_title'] ) {
$show_title = FALSE;
}
if ( ! empty( $atts['show_title'] ) && ! $atts['show_title'] ) {
$show_title = FALSE;
}
}
if ( $show_title ) { ?>
<h3 class="section-heading <?php
echo esc_attr( $tabs[0]['class'] );
if ( ! empty( $atts['deferred_load_tabs'] ) ) {
echo esc_attr( ' bs-deferred-tabs' );
}
if ( $multi_tab ) {
echo esc_attr( ' multi-tab' );
}
?>">
<?php if ( ! $multi_tab ) { ?>
<?php if ( ! empty( $tabs[0]['link'] ) ) { ?>
<a href="<?php echo esc_url( $tabs[0]['link'] ); ?>" class="main-link">
<span
class="h-text <?php echo esc_attr( $tabs[0]['class'] ); ?>"><?php echo $tabs[0]['icon'], esc_html( $tabs[0]['title'] ); // icon escaped before ?></span>
</a>
<?php } else { ?>
<span
class="h-text <?php echo esc_attr( $tabs[0]['class'] ); ?> main-link"><?php echo $tabs[0]['icon'], esc_html( $tabs[0]['title'] ); // icon escaped before ?></span>
<?php } ?>
<?php } else { ?>
<?php foreach ( (array) $tabs as $tab ) { ?>
<a href="#<?php echo esc_attr( $tab['id'] ) ?>" data-toggle="tab"
aria-expanded="<?php echo $tab['active'] ? 'true' : 'false'; ?>"
class="<?php echo $tab['active'] ? 'main-link active' : 'other-link'; ?>"
<?php if ( isset( $tab['data'] ) ) {
foreach ( $tab['data'] as $key => $value ) {
printf( ' data-%s="%s"', sanitize_key( $key ), esc_attr( $value ) );
}
} ?>
>
<span
class="h-text <?php echo esc_attr( $tab['class'] ); ?>"><?php echo $tab['icon'] . esc_html( $tab['title'] ); // icon escaped before ?></span>
</a>
<?php } ?>
<?php } ?>
</h3>
<?php
}
}// publisher_block_the_heading
}
if ( ! function_exists( 'publisher_format_icon' ) ) {
/**
* Handy function used to get post format badge
*
* @param bool $echo Echo or return
*
* @return string
*/
function publisher_format_icon( $echo = TRUE ) {
$output = '';
if ( get_post_type() == 'post' ) {
$format = get_post_format();
if ( $format ) {
switch ( $format ) {
case 'video':
$output = '<span class="format-icon format-' . $format . '"><i class="fa fa-play"></i></span>';
break;
case 'aside':
$output = '<span class="format-icon format-' . $format . '"><i class="fa fa-pencil"></i></span>';
break;
case 'quote':
$output = '<span class="format-icon format-' . $format . '"><i class="fa fa-quote-left"></i></span>';
break;
case 'gallery':
case 'image':
$output = '<span class="format-icon format-' . $format . '"><i class="fa fa-camera"></i></span>';
break;
case 'status':
$output = '<span class="format-icon format-' . $format . '"><i class="fa fa-refresh"></i></span>';
break;
case 'audio':
$output = '<span class="format-icon format-' . $format . '"><i class="fa fa-music"></i></span>';
break;
case 'chat':
$output = '<span class="format-icon format-' . $format . '"><i class="fa fa-coffee"></i></span>';
break;
case 'link':
$output = '<span class="format-icon format-' . $format . '"><i class="fa fa-link"></i></span>';
break;
}
}
}
if ( $echo ) {
echo $output; // escaped before
} else {
return $output;
}
} // publisher_format_badge_code
} // if
if ( ! function_exists( 'publisher_get_links_pagination' ) ) {
/**
* @param array $options
*
* @return string
*/
function publisher_get_links_pagination( $options = array() ) {
// Default Options
$default_options = array(
'echo' => TRUE,
);
// Texts with RTL support
if ( is_rtl() ) {
$default_options['older-text'] = '<i class="fa fa-angle-double-right"></i> ' . publisher_translation_get( 'pagination_newer' );
$default_options['next-text'] = publisher_translation_get( 'pagination_older' ) . ' <i class="fa fa-angle-double-left"></i>';
} else {
$default_options['next-text'] = '<i class="fa fa-angle-double-left"></i> ' . publisher_translation_get( 'pagination_older' );
$default_options['older-text'] = publisher_translation_get( 'pagination_newer' ) . ' <i class="fa fa-angle-double-right"></i>';
}
// Merge default and passed options
$options = wp_parse_args( $options, $default_options );
if ( ! $options['echo'] ) {
ob_start();
}
// fix category posts link because of offset
if ( is_category() ) {
$term_id = get_queried_object()->term_id;
$count = bf_get_term_posts_count( $term_id, array( 'include_childs' => TRUE ) );
$limit = get_option( 'posts_per_page' );
$slider_config = publisher_cat_main_slider_config();
// Custom count per category
if ( bf_get_term_meta( 'term_posts_count', get_queried_object()->term_id, '' ) != '' ) {
$limit = bf_get_term_meta( 'term_posts_count', get_queried_object()->term_id, '' );
} // Custom count for all categories
elseif ( publisher_get_option( 'cat_posts_count' ) != '' && intval( publisher_get_option( 'cat_posts_count' ) ) > 0 ) {
$limit = publisher_get_option( 'cat_posts_count' );
}
if ( $slider_config['show'] && $slider_config['type'] == 'custom-blocks' ) {
$max_items = ceil( ( $count - intval( $slider_config['posts'] ) ) / $limit );
} else {
$max_items = publisher_get_query()->max_num_pages;
}
} else {
$max_items = publisher_get_query()->max_num_pages;
}
if ( $max_items > 1 ) {
?>
<div <?php publisher_attr( 'pagination', 'bs-links-pagination clearfix' ) ?>>
<div class="older"><?php next_posts_link( $options['next-text'], $max_items ); ?></div>
<div class="newer"><?php previous_posts_link( $options['older-text'] ); ?></div>
</div>
<?php
}
if ( ! $options['echo'] ) {
return ob_get_clean();
}
} // publisher_get_links_pagination
} // if
if ( ! function_exists( 'publisher_get_pagination' ) ) {
/**
* BetterTemplate Custom Pagination
*
* @param array $options extend options for paginate_links()
*
* @return array|mixed|string
*
* @see paginate_links()
*/
function publisher_get_pagination( $options = array() ) {
global $wp_rewrite;
// Default Options
$default_options = array(
'echo' => TRUE,
'use-wp_pagenavi' => TRUE,
'users-per-page' => 6,
);
// Prepare query
if ( publisher_get_query() != NULL ) {
$default_options['query'] = publisher_get_query();
} else {
global $wp_query;
$default_options['query'] = $wp_query;
}
// Merge default and passed options
$options = wp_parse_args( $options, $default_options );
// Texts with RTL support
if ( ! isset( $options['next-text'] ) && ! isset( $options['prev-text'] ) ) {
if ( is_rtl() ) {
$options['next-text'] = publisher_translation_get( 'pagination_next' ) . ' <i class="fa fa-angle-left"></i>';
$options['prev-text'] = '<i class="fa fa-angle-right"></i> ' . publisher_translation_get( 'pagination_prev' );
} else {
$options['next-text'] = publisher_translation_get( 'pagination_next' ) . ' <i class="fa fa-angle-right"></i>';
$options['prev-text'] = ' <i class="fa fa-angle-left"></i> ' . publisher_translation_get( 'pagination_prev' );
}
}
// WP-PageNavi Plugin
if ( $options['use-wp_pagenavi'] && function_exists( 'wp_pagenavi' ) && ! is_a( $options['query'], 'WP_User_Query' ) ) {
ob_start();
// Use WP-PageNavi plugin to generate pagination
wp_pagenavi(
array(
'query' => $options['query']
)
);
$pagination = ob_get_clean();
} // Custom Pagination With WP Functionality
else {
$paged = $options['query']->get( 'paged', '' ) ? $options['query']->get( 'paged', '' ) : ( $options['query']->get( 'page', '' ) ? $options['query']->get( 'page', '' ) : 1 );
if ( is_a( $options['query'], 'WP_User_Query' ) ) {
$offset = $options['users-per-page'] * ( $paged - 1 );
$total_pages = ceil( $options['query']->total_users / $options['users-per-page'] );
} else {
$total_pages = $options['query']->max_num_pages;
// fix category posts link because of offset
if ( is_category() ) {
$term_id = get_queried_object()->term_id;
$count = bf_get_term_posts_count( $term_id, array( 'include_childs' => TRUE ) );
$limit = get_option( 'posts_per_page' );
$slider_config = publisher_cat_main_slider_config( $term_id );
// Custom count per category
if ( bf_get_term_meta( 'term_posts_count', $term_id, '' ) != '' ) {
$limit = bf_get_term_meta( 'term_posts_count', $term_id, '' );
} // Custom count for all categories
elseif ( publisher_get_option( 'cat_posts_count' ) != '' && intval( publisher_get_option( 'cat_posts_count' ) ) > 0 ) {
$limit = publisher_get_option( 'cat_posts_count' );
}
if ( $slider_config['show'] && $slider_config['type'] == 'custom-blocks' ) {
$total_pages = ceil( ( $count - intval( $slider_config['posts'] ) ) / $limit );
}
}
}
if ( $total_pages <= 1 ) {
return '';
}
$args = array(
'base' => add_query_arg( 'paged', '%#%' ),
'current' => max( 1, $paged ),
'total' => $total_pages,
'next_text' => $options['next-text'],
'prev_text' => $options['prev-text']
);
if ( is_a( $options['query'], 'WP_User_Query' ) ) {
$args['offset'] = $offset;
}
if ( $wp_rewrite->using_permalinks() ) {
$big = 999999999;
$args['base'] = str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) );
}
if ( is_search() ) {
$args['add_args'] = array(
's' => urlencode( get_query_var( 's' ) )
);
}
$pagination = paginate_links( array_merge( $args, $options ) );
$pagination = preg_replace( '/&paged=1(\'|")/', '\\1', trim( $pagination ) );
}
$pagination = '<div ' . publisher_get_attr( 'pagination', 'bs-numbered-pagination' ) . '>' . $pagination . '</div>';
if ( $options['echo'] ) {
echo $pagination; // escaped before
} else {
return $pagination;
}
} // publisher_get_pagination
} // if
add_filter( 'publisher/archive/before-loop', 'publisher_archive_show_pagination' );
add_filter( 'publisher/archive/after-loop', 'publisher_archive_show_pagination' );
if ( ! function_exists( 'publisher_archive_show_pagination' ) ) {
/**
* used to add pagination
*
* note: do not call this manually. it should be fire with following callbacks:
* 1. publisher/archive/before-loop
* 2. publisher/archive/after-loop
*/
function publisher_archive_show_pagination() {
$wp_query = publisher_get_query();
$pagination = publisher_get_pagination_style(); // determine current page pagination (with inner cache)
$filter = current_filter();
switch ( TRUE ) {
case $pagination == 'numbered' && $filter == 'publisher/archive/before-loop':
return;
break;
case $pagination == 'numbered' && $filter == 'publisher/archive/after-loop':
publisher_get_pagination();
return;
break;
case $pagination == 'links' && $filter == 'publisher/archive/before-loop':
return;
break;
case $pagination == 'links' && $filter == 'publisher/archive/after-loop':
publisher_get_links_pagination();
return;
break;
case $pagination == 'ajax_more_btn_infinity' && $filter == 'publisher/archive/before-loop':
case $pagination == 'ajax_infinity' && $filter == 'publisher/archive/before-loop':
case $pagination == 'ajax_more_btn' && $filter == 'publisher/archive/before-loop':
case $pagination == 'ajax_next_prev' && $filter == 'publisher/archive/before-loop':
$max_num_pages = bf_get_wp_query_total_pages( $wp_query );
// fix for when there is no more pages
if ( $max_num_pages <= 1 ) {
return;
}
// Create valid name for BS_Pagination
$pagin_style = str_replace( 'ajax_', '', $pagination );
$atts = array(
'paginate' => $pagin_style,
'have_pagination' => TRUE,
);
publisher_theme_pagin_manager()->wrapper_start( $atts );
break;
case $pagination == 'ajax_more_btn_infinity' && $filter == 'publisher/archive/after-loop':
case $pagination == 'ajax_infinity' && $filter == 'publisher/archive/after-loop':
case $pagination == 'ajax_more_btn' && $filter == 'publisher/archive/after-loop':
case $pagination == 'ajax_next_prev' && $filter == 'publisher/archive/after-loop':
$max_num_pages = bf_get_wp_query_total_pages( $wp_query );
// fix for when there is no more pages
if ( $max_num_pages <= 1 ) {
return;
}
// Create valid name for BS_Pagination
$pagin_style = str_replace( 'ajax_', '', $pagination );
$atts = array(
'paginate' => $pagin_style,
'have_pagination' => TRUE,
'show_label' => publisher_theme_pagin_manager()->get_pagination_label( 1, $max_num_pages ),
'next_page_link' => next_posts( 0, FALSE ), // next page link for better SEO
'query_vars' => bf_get_wp_query_vars( $wp_query )
);
publisher_theme_pagin_manager()->wrapper_end();
publisher_theme_pagin_manager()->display_pagination( $atts, $wp_query, 'Publisher::bs_pagin_ajax_archive', 'custom' );
}
} // publisher_archive_show_pagination
} // if
if ( ! function_exists( 'publisher_general_fix_shortcode_vc_style' ) ) {
/**
* Fixes shortcode style for generated style from VC -> General fixes
*
* @param $atts
*/
function publisher_general_fix_shortcode_vc_style( &$atts ) {
switch ( $atts['shortcode-id'] ) {
case 'bs-modern-grid-listing-5':
$bg_color = bf_shortcode_custom_css_prop( $atts['css'], 'background-color' );
if ( empty( $bg_color ) ) {
return;
}
$class = bf_shortcode_custom_css_class( $atts );
bf_add_css( '.' . $class . ' .listing-mg-5-item-big .content-container{ background-color:' . $bg_color . ' !important}', TRUE, TRUE );
break;
// Classic Listing 3 content BG Fix
case 'bs-classic-listing-3':
case 'bs-mix-listing-4-7':
case 'bs-mix-listing-4-2':
case 'bs-mix-listing-4-1':
$bg_color = bf_shortcode_custom_css_prop( $atts['css'], 'background-color' );
if ( empty( $bg_color ) ) {
return;
}
$class = bf_shortcode_custom_css_class( $atts );
bf_add_css( '.' . $class . ' .listing-item-classic-3 .featured .title{ background-color:' . $bg_color . '}', TRUE, TRUE );
break;
}
return; // It's for inner style!
}
}// publisher_fix_shortcode_vc_style
if ( ! function_exists( 'publisher_fix_shortcode_vc_style' ) ) {
/**
* Fixes shortcode style for generated style from VC
*
* @param $atts
*/
function publisher_fix_shortcode_vc_style( &$atts ) {
publisher_general_fix_shortcode_vc_style( $atts ); // general fixes
return; // It's for inner style!
}
}// publisher_fix_shortcode_vc_style
add_filter( 'better-framework/shortcodes/atts', 'publisher_fix_bs_listing_vc_atts' );
if ( ! function_exists( 'publisher_fix_bs_listing_vc_atts' ) ) {
/**
* Used to customize bs listing atts for VC
*
* @param $atts
*
* @return mixed
*/
function publisher_fix_bs_listing_vc_atts( $atts ) {
if ( empty( $atts['css'] ) ) {
return $atts;
}
publisher_fix_shortcode_vc_style( $atts );
return $atts;
}
}
if ( ! function_exists( 'publisher_get_single_template' ) ) {
/**
* Used to get template for single page
*
* @return string
*/
function publisher_get_single_template() {
// default for other post types
if ( ! is_singular( 'post' ) ) {
return 'style-1';
}
$template = bf_get_post_meta( 'post_template' );
if ( $template == 'default' ) {
$template = publisher_get_option( 'post_template' );
}
// validate
if ( $template != 'default' && ! publisher_is_valid_single_template( $template ) ) {
$template = 'default';
}
// default is style-1
if ( $template == 'default' ) {
$template = 'style-1';
}
return $template;
}
}// publisher_fix_shortcode_vc_style
if ( ! function_exists( 'publisher_is_valid_single_template' ) ) {
/**
* Used to get template for single page
*
* @return string
*/
function publisher_get_single_template_option( $default = FALSE ) {
$option = array();
if ( $default ) {
$option['default'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-default.png',
'label' => __( '-- Default --', 'publisher' ),
);
}
$option['style-1'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-1.png',
'label' => __( 'Style 1', 'publisher' ),
);
$option['style-2'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-2.png',
'label' => __( 'Style 2', 'publisher' ),
);
$option['style-3'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-3.png',
'label' => __( 'Style 3', 'publisher' ),
);
$option['style-4'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-4.png',
'label' => __( 'Style 4', 'publisher' ),
);
$option['style-5'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-5.png',
'label' => __( 'Style 5', 'publisher' ),
);
$option['style-6'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-6.png',
'label' => __( 'Style 6', 'publisher' ),
);
$option['style-7'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-7.png',
'label' => __( 'Style 7', 'publisher' ),
);
$option['style-8'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-8.png',
'label' => __( 'Style 8', 'publisher' ),
);
$option['style-9'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-9.png',
'label' => __( 'Style 9', 'publisher' ),
);
$option['style-10'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-10.png',
'label' => __( 'Style 10', 'publisher' ),
);
$option['style-11'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-11.png',
'label' => __( 'Style 11', 'publisher' ),
);
$option['style-12'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-12.png',
'label' => __( 'Style 12', 'publisher' ),
);
$option['style-13'] = array(
'img' => PUBLISHER_THEME_URI . 'images/options/post-style-13.png',
'label' => __( 'Style 13', 'publisher' ),
);
return $option;
}
}// publisher_fix_shortcode_vc_style
if ( ! function_exists( 'publisher_is_valid_single_template' ) ) {
/**
* Checks parameter to be a theme valid single template
*
* @param $template
*
* @return bool
*/
function publisher_is_valid_single_template( $template ) {
return array_key_exists( $template, publisher_get_single_template_option() );
} // publisher_is_valid_listing
}
if ( ! function_exists( 'publisher_social_counter_options_list_callback' ) ) {
/**
* Handy deferred function for improving performance
*
* @return array
*/
function publisher_social_counter_options_list_callback() {
if ( ! class_exists( 'Better_Social_Counter' ) ) {
return array();
} else {
return Better_Social_Counter_Data_Manager::self()->get_widget_options_list();
}
}
}
if ( ! function_exists( 'publisher_is_animated_thumbnail_active' ) ) {
/**
* Returns the condition of animated thumbnail activation
*
* @return bool
*/
function publisher_is_animated_thumbnail_active() {
return TRUE;
}
}
if ( ! function_exists( 'publisher_get_related_post_type' ) ) {
/**
* Returns type of related posts for current page
*
* @return bool|mixed|null|string|void
*/
function publisher_get_related_post_type() {
$related_post = 'default';
if ( is_singular( 'post' ) || is_singular( 'page' ) ) {
$related_post = bf_get_post_meta( 'post_related' );
}
if ( $related_post == 'default' || $related_post == '' || $related_post == FALSE ) {
$related_post = publisher_get_option( 'post_related' );
}
return $related_post;
}
}
if ( ! function_exists( 'publisher_get_post_comments_type' ) ) {
/**
* Returns type of comments for current page
*
* @return bool|mixed|null|string|void
*/
function publisher_get_post_comments_type() {
// Return from cache
if ( publisher_get_global( 'post-comments-type-' . get_the_ID(), FALSE ) ) {
return publisher_get_global( 'post-comments-type-' . get_the_ID(), FALSE );
}
$type = 'default';
// for pages and posts
if ( is_singular( 'post' ) || is_singular( 'page' ) ) {
$type = bf_get_post_meta( 'post_comments', get_the_ID(), 'default' );
}
// get default from panel
if ( empty( $type ) || $type == FALSE || $type == 'default' ) {
if ( is_singular( 'page' ) ) {
$type = publisher_get_option( 'page_comments' );
} else {
$type = publisher_get_option( 'post_comments' );
}
}
// if ajaxify is not enabled
if ( $type == 'show-ajaxified' && ! publisher_is_ajaxified_comments_active() ) {
$type = 'show-simple';
}
$_check = array(
'show-ajaxified' => '',
'show-simple' => '',
'hide' => '',
);
// if type is not valid
if ( ! isset( $_check[ $type ] ) ) {
$type = 'show-simple';
}
unset( $_check ); // clear memory
//
// If related post is infinity then posts loaded from ajax should have show comments button
//
if ( publisher_get_related_post_type() == 'infinity-related-post' || ( defined( 'PUBLISHER_THEME_AJAXIFIED_LOAD_POST' ) && PUBLISHER_THEME_AJAXIFIED_LOAD_POST ) ) {
$type = 'show-ajaxified';
}
// Change ajaxified to show simple when user submitted an comment before
if ( $type == 'show-ajaxified' && ! empty( $_GET['publisher-theme-comment-inserted'] ) && $_GET['publisher-theme-comment-inserted'] == '1' ) {
$type = 'show-simple';
}
// Cache it
publisher_set_global( 'post-comments-type-' . get_the_ID(), $type );
return $type;
}
}
if ( ! function_exists( 'publisher_comments_template' ) ) {
/**
* Handy function to getting correct comments file
*/
function publisher_comments_template() {
switch ( publisher_get_post_comments_type() ) {
case 'show-simple':
comments_template();
break;
case 'show-ajaxified':
comments_template( '/comments-ajaxified.php' );
break;
case FALSE:
case '':
case 'hide':
return;
}
}
}
// Includes panel blocks setting field generator callback only in admin
if ( is_admin() ) {
include PUBLISHER_THEME_PATH . 'includes/options/fields-cb.php';
}