4242 lines
112 KiB
PHP
4242 lines
112 KiB
PHP
<?php
|
||
/**
|
||
* Theme functions
|
||
*
|
||
* @package Betheme
|
||
* @author Muffin group
|
||
* @link https://muffingroup.com
|
||
*/
|
||
|
||
/**
|
||
* Dynamic data
|
||
*/
|
||
|
||
function be_dynamic_data($string, $post_id = false){
|
||
$mfndd = new MfnDynamicData();
|
||
return $mfndd->render($string, $post_id);
|
||
}
|
||
|
||
/**
|
||
* Allowed HTML elements for wp_kses
|
||
*/
|
||
|
||
if (! function_exists('mfn_allowed_html')) {
|
||
function mfn_allowed_html($type = false)
|
||
{
|
||
switch ($type) {
|
||
|
||
case 'button':
|
||
|
||
$allowed_html = array(
|
||
'i' => array(
|
||
'class' => array(),
|
||
),
|
||
'del' => array(),
|
||
'span' => array(),
|
||
'strong' => array(),
|
||
);
|
||
break;
|
||
|
||
case 'caption':
|
||
|
||
$allowed_html = array(
|
||
'a' => array(
|
||
'href' => array(),
|
||
'target' => array(),
|
||
),
|
||
'b' => array(),
|
||
'br' => array(),
|
||
'em' => array(),
|
||
'span' => array(),
|
||
'strong' => array(),
|
||
'u' => array(),
|
||
);
|
||
break;
|
||
|
||
case 'desc':
|
||
|
||
$allowed_html = array(
|
||
'a' => array(
|
||
'href' => array(),
|
||
'target' => array(),
|
||
),
|
||
'b' => array(),
|
||
'br' => array(),
|
||
'em' => array(),
|
||
'i' => array(
|
||
'class' => array(),
|
||
),
|
||
'li' => array(),
|
||
'span' => array(),
|
||
'strong' => array(),
|
||
'u' => array(),
|
||
'ul' => array(),
|
||
);
|
||
break;
|
||
|
||
default:
|
||
|
||
$allowed_html = array(
|
||
'b' => array(),
|
||
'br' => array(),
|
||
'em' => array(),
|
||
'i' => array(
|
||
'class' => array(),
|
||
),
|
||
'span' => array(
|
||
'id' => array(),
|
||
'class' => array(),
|
||
'style' => array(),
|
||
),
|
||
'strong' => array(),
|
||
'u' => array(),
|
||
);
|
||
|
||
}
|
||
|
||
return $allowed_html;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Allowed HTML title tags
|
||
* prevent Cross-Site Scripting (title_tag="h2 onmouseover=alert(1)")
|
||
*/
|
||
|
||
if (! function_exists('mfn_allowed_title_tag')) {
|
||
function mfn_allowed_title_tag( $tag )
|
||
{
|
||
$allowed = ['h1','h2','h3','h4','h5','h6','p','span','div'];
|
||
|
||
if( ! in_array( $tag, $allowed ) ){
|
||
return 'p';
|
||
}
|
||
|
||
return $tag;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Image Size | Add
|
||
* TIP: add_image_size ( string $name, int $width, int $height, bool|array $crop = false )
|
||
*/
|
||
|
||
if (! function_exists('mfn_add_image_size')) {
|
||
function mfn_add_image_size()
|
||
{
|
||
// general theme thumbnail with crop / the same as default WP thumbnail size to avoid duplication
|
||
add_image_size('be_thumbnail', 150, 150, true);
|
||
|
||
// clients & clients slider elements
|
||
add_image_size('be_clients', 150, 75, false);
|
||
|
||
|
||
// slider (builder items)
|
||
add_image_size('slider-content', 1630, 860, true);
|
||
|
||
// portfolio | style: masonry flat
|
||
|
||
add_image_size('portfolio-mf', 1280, 1000, true);
|
||
add_image_size('portfolio-mf-w', 1280, 500, true); /* Wide */
|
||
add_image_size('portfolio-mf-t', 768, 1200, true); /* Tall */
|
||
|
||
// portfolio | style: list
|
||
|
||
add_image_size('portfolio-list', 1920, 750, true);
|
||
|
||
// blog & portfolio: dynamic sizes
|
||
|
||
$archives = [
|
||
'width' => mfn_opts_get('featured-blog-portfolio-width', 960),
|
||
'height' => mfn_opts_get('featured-blog-portfolio-height', 750),
|
||
'crop' => 'resize' == mfn_opts_get('featured-blog-portfolio-crop', 'crop') ? false : true,
|
||
];
|
||
|
||
add_image_size('blog-portfolio', $archives['width'], $archives['height'], $archives['crop']);
|
||
|
||
$single = [
|
||
'width' => mfn_opts_get('featured-single-width', 1200),
|
||
'height' => mfn_opts_get('featured-single-height', 480),
|
||
'crop' => 'resize' == mfn_opts_get('featured-single-crop', 'crop') ? false : true,
|
||
];
|
||
|
||
add_image_size('blog-single', $single['width'], $single['height'], $single['crop']);
|
||
}
|
||
}
|
||
add_action('after_setup_theme', 'mfn_add_image_size', 11);
|
||
|
||
/**
|
||
* Calculate images srcset
|
||
*/
|
||
|
||
function mfn_calculate_image_sizes($sizes, $dimensions) {
|
||
|
||
if( empty($dimensions[0]) ){
|
||
return $sizes;
|
||
}
|
||
|
||
// Maximum mobile images srcset width
|
||
$mobile_image_max_width = mfn_opts_get('mobile-images-max-srcset', mfn_opts_get('mobile-grid-width', 480));
|
||
|
||
// current image width
|
||
$width = $dimensions[0];
|
||
|
||
$mobile_width = min([$mobile_image_max_width, $width]);
|
||
|
||
// images smaller than mobile grid
|
||
if( $width < 768 ){
|
||
return '(max-width:767px) '. $mobile_width .'px, '. $width .'px';
|
||
}
|
||
|
||
return '(max-width:767px) '. $mobile_width .'px, (max-width:'. $width .'px) 100vw, '. $width .'px';
|
||
}
|
||
add_filter('wp_calculate_image_sizes', 'mfn_calculate_image_sizes', 10, 2);
|
||
|
||
/**
|
||
* Add mobile images custom size
|
||
*/
|
||
|
||
function mfn_add_mobile_image_size() {
|
||
|
||
// Maximum mobile images srcset width
|
||
$mobile_image_max_width = mfn_opts_get('mobile-images-max-srcset', mfn_opts_get('mobile-grid-width', 480));
|
||
|
||
add_image_size('mobile-srcset', $mobile_image_max_width, $mobile_image_max_width * 2, false);
|
||
|
||
}
|
||
add_action('after_setup_theme', 'mfn_add_mobile_image_size', 11);
|
||
|
||
/**
|
||
* Limit maximum image srcset to selected image size
|
||
*/
|
||
|
||
function mfn_max_srcset_image_width( $max_width, $size_array ) {
|
||
|
||
if( ! mfn_opts_get('srcset-limit') ){
|
||
return $max_width;
|
||
}
|
||
|
||
$width = $size_array[0];
|
||
|
||
if ( $width > 400 ) {
|
||
$max_width = $width;
|
||
}
|
||
|
||
return $max_width;
|
||
}
|
||
add_filter( 'max_srcset_image_width', 'mfn_max_srcset_image_width', 10, 2 );
|
||
|
||
/**
|
||
* Image size | Get size dimensions
|
||
*/
|
||
|
||
if (! function_exists('mfn_get_image_sizes')) {
|
||
function mfn_get_image_sizes($size, $string = false)
|
||
{
|
||
$sizes = array();
|
||
|
||
$sizes['width'] = get_option("{$size}_size_w");
|
||
$sizes['height'] = get_option("{$size}_size_h");
|
||
$sizes['crop'] = (bool) get_option("{$size}_crop");
|
||
|
||
if ($string) {
|
||
$crop = $sizes['crop'] ? ', crop' : '';
|
||
return 'max width: '. esc_attr($sizes['width']) .', max height: '. esc_attr($sizes['height']) . esc_attr($crop);
|
||
}
|
||
|
||
return $sizes;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* SVG, ICO, TTF, WOFF, JSON files upload
|
||
*/
|
||
|
||
if (! function_exists('mfn_mimes_support')) {
|
||
function mfn_mimes_support( $file_types )
|
||
{
|
||
$theme_disable = mfn_opts_get('theme-disable');
|
||
|
||
if( empty($theme_disable['svg-allow']) && current_user_can('edit_theme_options') ){
|
||
$file_types['svg'] = 'image/svg+xml';
|
||
$file_types['svgz'] = 'image/svg+xml';
|
||
$file_types['ico'] = 'image/x-icon';
|
||
$file_types['ttf'] = 'application/font-sfnt';
|
||
$file_types['woff'] = 'application/octet-stream';
|
||
}
|
||
|
||
if( empty($theme_disable['json-allow']) ){
|
||
$file_types['json'] = 'application/json';
|
||
}
|
||
|
||
return $file_types;
|
||
}
|
||
}
|
||
add_action('upload_mimes', 'mfn_mimes_support');
|
||
|
||
/**
|
||
* ICO, TTF, WOFF files upload
|
||
*/
|
||
|
||
function mfn_check_filetype_and_ext_ico( $types, $file, $filename, $mimes ) {
|
||
|
||
$theme_disable = mfn_opts_get('theme-disable');
|
||
if ( empty($theme_disable['svg-allow']) && false !== strpos( $filename, '.ico' ) ) {
|
||
$types['ext'] = 'ico';
|
||
$types['type'] = 'image/ico';
|
||
}
|
||
|
||
return $types;
|
||
}
|
||
add_filter( 'wp_check_filetype_and_ext', 'mfn_check_filetype_and_ext_ico', 10, 4 );
|
||
|
||
function mfn_check_filetype_and_ext_ttf( $types, $file, $filename, $mimes ) {
|
||
|
||
$theme_disable = mfn_opts_get('theme-disable');
|
||
if ( empty($theme_disable['svg-allow']) && false !== strpos( $filename, '.ttf' ) ) {
|
||
$types['ext'] = 'ttf';
|
||
$types['type'] = 'application/font-sfnt';
|
||
}
|
||
|
||
return $types;
|
||
}
|
||
add_filter( 'wp_check_filetype_and_ext', 'mfn_check_filetype_and_ext_ttf', 10, 4 );
|
||
|
||
function mfn_check_filetype_and_ext_woff( $types, $file, $filename, $mimes ) {
|
||
|
||
$theme_disable = mfn_opts_get('theme-disable');
|
||
if ( empty($theme_disable['svg-allow']) && false !== strpos( $filename, '.ttf' ) ) {
|
||
$types['ext'] = 'woff';
|
||
$types['type'] = 'application/octet-stream';
|
||
}
|
||
|
||
return $types;
|
||
}
|
||
add_filter( 'wp_check_filetype_and_ext', 'mfn_check_filetype_and_ext_woff', 10, 4 );
|
||
|
||
/**
|
||
* JSON files upload
|
||
*/
|
||
|
||
if (! function_exists('mfn_json_support')) {
|
||
function mfn_json_support( $types, $file, $filename, $mimes )
|
||
{
|
||
|
||
$theme_disable = mfn_opts_get('theme-disable');
|
||
if( ! empty($theme_disable['json-allow']) ){
|
||
return $types;
|
||
}
|
||
|
||
if ( $types['ext'] && $types['type'] ) {
|
||
return $types;
|
||
}
|
||
|
||
$filetype = wp_check_filetype( $filename );
|
||
|
||
if ( $filetype['ext'] === 'json' ) {
|
||
$types['ext'] = 'json';
|
||
$types['type'] = 'application/json';
|
||
}
|
||
|
||
return $types;
|
||
}
|
||
}
|
||
add_action('wp_check_filetype_and_ext', 'mfn_json_support', 10, 4);
|
||
|
||
/**
|
||
* SVH upload sanitization
|
||
*/
|
||
|
||
function mfn_sanitize_svg_file_during_upload($file) {
|
||
if ($file['type'] === 'image/svg+xml') {
|
||
$file_path = $file['tmp_name'];
|
||
|
||
// Read the SVG content
|
||
$svg_content = file_get_contents($file_path);
|
||
|
||
// Create a new Sanitizer instance
|
||
$sanitizer = new enshrined\svgSanitize\Sanitizer();
|
||
|
||
// Sanitize the SVG content
|
||
$sanitized_svg = $sanitizer->sanitize($svg_content);
|
||
|
||
// Save the sanitized content back to the file
|
||
if ($sanitized_svg) {
|
||
file_put_contents($file_path, $sanitized_svg);
|
||
} else {
|
||
// Handle sanitization failure (optional)
|
||
$file['error'] = 'SVG sanitization failed.';
|
||
}
|
||
}
|
||
|
||
return $file;
|
||
}
|
||
add_filter('wp_handle_upload_prefilter', 'mfn_sanitize_svg_file_during_upload');
|
||
|
||
/**
|
||
* Excerpt | Lenght
|
||
*/
|
||
|
||
if (! function_exists('mfn_excerpt_length')) {
|
||
function mfn_excerpt_length($length)
|
||
{
|
||
return esc_attr(mfn_opts_get('excerpt-length', 26));
|
||
}
|
||
}
|
||
add_filter('excerpt_length', 'mfn_excerpt_length', 999);
|
||
|
||
/**
|
||
* Excerpt | Wrap [...] into <span>
|
||
*/
|
||
|
||
if (! function_exists('mfn_trim_excerpt')) {
|
||
function mfn_trim_excerpt($text)
|
||
{
|
||
return '<span class="excerpt-hellip"> […]</span>';
|
||
}
|
||
}
|
||
add_filter('excerpt_more', 'mfn_trim_excerpt');
|
||
|
||
/**
|
||
* Excerpt | for Pages
|
||
*/
|
||
|
||
if (! function_exists('mfn_add_excerpts_to_pages')) {
|
||
function mfn_add_excerpts_to_pages()
|
||
{
|
||
add_post_type_support('page', 'excerpt');
|
||
}
|
||
}
|
||
add_action('init', 'mfn_add_excerpts_to_pages');
|
||
|
||
/**
|
||
* Slug | Generate
|
||
*/
|
||
|
||
if (! function_exists('mfn_slug')) {
|
||
function mfn_slug($string = false)
|
||
{
|
||
return strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string)));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Blog Page | Order
|
||
*/
|
||
|
||
if (! function_exists('mfn_blog_order')) {
|
||
function mfn_blog_order($query)
|
||
{
|
||
if ($query->is_main_query()) {
|
||
|
||
if (is_home() || is_category() || is_tag() || is_author()) {
|
||
|
||
$blog_tmpl = mfn_archive_template_id('blog');
|
||
|
||
if( !empty($blog_tmpl) && !empty(get_post_meta($blog_tmpl, 'mfn-query-modifiers', true)) ){
|
||
|
||
$qm = json_decode( get_post_meta($blog_tmpl, 'mfn-query-modifiers', true) );
|
||
foreach ($qm as $key => $value) {
|
||
$query->set($key, $value);
|
||
}
|
||
|
||
|
||
}else{
|
||
$orderby = mfn_opts_get('blog-orderby', 'date');
|
||
$order = mfn_opts_get('blog-order', 'DESC');
|
||
|
||
if ($orderby == 'date' && $order == 'DESC') {
|
||
return true;
|
||
}
|
||
|
||
$query->set('orderby', $orderby);
|
||
$query->set('order', $order);
|
||
}
|
||
|
||
|
||
}else if( is_tax('portfolio-types') ) {
|
||
|
||
$portfolio_tmpl = mfn_archive_template_id('portfolio');
|
||
|
||
if( !empty($portfolio_tmpl) && !empty(get_post_meta($portfolio_tmpl, 'mfn-query-modifiers', true)) ){
|
||
|
||
$qm = json_decode( get_post_meta($portfolio_tmpl, 'mfn-query-modifiers', true) );
|
||
foreach ($qm as $key => $value) {
|
||
$query->set($key, $value);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
return $query;
|
||
}
|
||
}
|
||
add_action('pre_get_posts', 'mfn_blog_order');
|
||
|
||
/**
|
||
* Blog Page | Exclude category
|
||
*/
|
||
|
||
if (! function_exists('mfn_get_excluded_categories')) {
|
||
function mfn_get_excluded_categories()
|
||
{
|
||
$categories = array();
|
||
|
||
if ($exclude = mfn_opts_get('exclude-category')) {
|
||
$exclude = str_replace(' ', '', $exclude);
|
||
$exclude = explode(',', $exclude);
|
||
|
||
if (is_array($exclude)) {
|
||
$categories = $exclude;
|
||
}
|
||
}
|
||
|
||
return $categories;
|
||
}
|
||
}
|
||
|
||
if (! function_exists('mfn_exclude_category')) {
|
||
function mfn_exclude_category($query)
|
||
{
|
||
if (is_home() && $query->is_main_query()) {
|
||
$exclude_ids = array();
|
||
|
||
if ($exclude = mfn_get_excluded_categories()) {
|
||
foreach ($exclude as $slug) {
|
||
$category = get_category_by_slug($slug);
|
||
if( ! empty($category->term_id) ){
|
||
$exclude_ids[] = $category->term_id * -1;
|
||
}
|
||
}
|
||
}
|
||
|
||
$exclude_ids = implode(',', $exclude_ids);
|
||
|
||
$query->set('cat', $exclude_ids);
|
||
}
|
||
|
||
return $query;
|
||
}
|
||
}
|
||
add_filter('pre_get_posts', 'mfn_exclude_category');
|
||
|
||
/**
|
||
* SSL | Compatibility
|
||
*/
|
||
|
||
if ( !function_exists('mfn_ssl') ) {
|
||
function mfn_ssl($echo = false)
|
||
{
|
||
$ssl = '';
|
||
|
||
if (is_ssl()) {
|
||
$ssl = 's';
|
||
}
|
||
|
||
if ($echo) {
|
||
echo esc_attr($ssl);
|
||
}
|
||
|
||
return $ssl;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* SSL | Attachments
|
||
*/
|
||
|
||
if (! function_exists('mfn_ssl_attachments')) {
|
||
function mfn_ssl_attachments($url)
|
||
{
|
||
if (is_ssl()) {
|
||
return str_replace('http://', 'https://', $url);
|
||
}
|
||
return $url;
|
||
}
|
||
}
|
||
add_filter('wp_get_attachment_url', 'mfn_ssl_attachments');
|
||
|
||
/**
|
||
* White Label | Admin Body Class
|
||
*/
|
||
|
||
if (! function_exists('mfn_white_label_class')) {
|
||
function mfn_white_label_class($classes)
|
||
{
|
||
if (WHITE_LABEL) {
|
||
$classes .= ' white-label ';
|
||
}
|
||
return $classes;
|
||
}
|
||
}
|
||
add_filter('admin_body_class', 'mfn_white_label_class');
|
||
|
||
/**
|
||
* Hide Custom Fields meta boxes
|
||
*/
|
||
|
||
function mfn_hide_custom_fields() {
|
||
if ( ! mfn_bebuilder_access() ) { // administrator
|
||
remove_meta_box('postcustom', 'post', 'normal');
|
||
remove_meta_box('postcustom', 'page', 'normal');
|
||
}
|
||
}
|
||
add_action('admin_menu', 'mfn_hide_custom_fields');
|
||
|
||
/**
|
||
* Prevents duplicate price, rate in templates
|
||
*/
|
||
|
||
if (! function_exists('remove_standard_woo_actions_archive')) {
|
||
function remove_standard_woo_actions_archive(){
|
||
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
|
||
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
|
||
remove_action('woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10);
|
||
|
||
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );
|
||
|
||
remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
|
||
remove_action( 'woocommerce_after_shop_loop_item_title', 'mfn_append_excerpt_loop', 5 );
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Get Real Post ID
|
||
*/
|
||
|
||
if (! function_exists('mfn_ID')) {
|
||
function mfn_ID( $param = false )
|
||
{
|
||
global $post;
|
||
global $mfn_global;
|
||
|
||
// 404
|
||
|
||
if( is_404() ){
|
||
return false;
|
||
}
|
||
|
||
$post_id = get_the_ID();
|
||
|
||
// force template
|
||
|
||
if( !empty($_GET['mfn-template-id']) && is_numeric( $_GET['mfn-template-id'] ) && get_post_type( $_GET['mfn-template-id'] ) == 'template' && ( get_post_status( $_GET['mfn-template-id'] ) == 'publish' || (!empty($_GET['visual']) && $_GET['visual'] == 'iframe' ) ) ){
|
||
return $_GET['mfn-template-id'];
|
||
}
|
||
|
||
// woocommerce
|
||
|
||
if (function_exists('is_woocommerce') && is_woocommerce() && !is_admin() ) {
|
||
|
||
if( is_product() ){
|
||
|
||
$sp_tmpl = mfn_single_product_tmpl();
|
||
|
||
if( !empty($sp_tmpl) ){
|
||
return $sp_tmpl;
|
||
}
|
||
|
||
// for full width site/content in page options
|
||
if( 'perfect_match' == $param ){
|
||
return $post_id;
|
||
}
|
||
|
||
// return false;
|
||
return wc_get_page_id('shop'); // FIX: sidebar inherited from shop page
|
||
|
||
}else{
|
||
|
||
$shop_tmpl = mfn_shop_archive_tmpl();
|
||
if( !empty($shop_tmpl) ) return $shop_tmpl;
|
||
|
||
}
|
||
|
||
return wc_get_page_id('shop');
|
||
}
|
||
|
||
if( function_exists('is_woocommerce') && is_cart() && !empty( $mfn_global['cart'] ) && !is_admin() ) {
|
||
return $mfn_global['cart'];
|
||
}
|
||
|
||
if( function_exists('is_woocommerce') && is_checkout() && empty( is_wc_endpoint_url('order-received') ) && !empty( $mfn_global['checkout'] ) && !is_admin() ) {
|
||
return $mfn_global['checkout'];
|
||
}
|
||
|
||
if( function_exists('is_woocommerce') && is_checkout() && !empty( is_wc_endpoint_url('order-received') ) && !empty($mfn_global['thank_you']) && !is_admin() ) {
|
||
return $mfn_global['thank_you'];
|
||
}
|
||
|
||
if( is_singular() && !empty($mfn_global['single_post']) ){
|
||
|
||
// singulars template
|
||
|
||
if( 'perfect_match' == $param ){
|
||
return $post_id;
|
||
}
|
||
|
||
$portfolio_tmpl_id = $mfn_global['single_portfolio'];
|
||
$post_tmpl_id = $mfn_global['single_post'];
|
||
|
||
if( is_singular( 'post' ) && !empty($post_tmpl_id) && get_post_status($post_tmpl_id) == 'publish' ){
|
||
return $post_tmpl_id;
|
||
}
|
||
|
||
if( is_singular( 'portfolio' ) && !empty($portfolio_tmpl_id) && get_post_status($portfolio_tmpl_id) == 'publish' ){
|
||
return $portfolio_tmpl_id;
|
||
}
|
||
|
||
}
|
||
|
||
// search
|
||
|
||
if( is_search() ){
|
||
return false;
|
||
}
|
||
|
||
// taxonomy
|
||
|
||
if( is_tax('portfolio-types') || ( is_page() && get_the_ID() == mfn_opts_get('portfolio-page') ) ) {
|
||
//$portfolio_tmpl = mfn_archive_template_id('portfolio');
|
||
$portfolio_tmpl = mfn_archive_template_id('portfolio');
|
||
if( !empty($portfolio_tmpl) && get_post_status($portfolio_tmpl) == 'publish' ) {
|
||
return $portfolio_tmpl;
|
||
}else{
|
||
return mfn_opts_get('portfolio-page');
|
||
}
|
||
}
|
||
|
||
// archive
|
||
|
||
if( ! is_singular() ) {
|
||
if( is_post_type_archive() || in_array( get_post_type(), array( 'post', 'tribe_events' ) ) ) {
|
||
$blog_tmpl = mfn_archive_template_id('blog');
|
||
if( !empty($blog_tmpl) && get_post_status($blog_tmpl) == 'publish' ) {
|
||
return $blog_tmpl;
|
||
}else{
|
||
return mfn_get_blog_ID();
|
||
}
|
||
}
|
||
}
|
||
|
||
return get_the_ID();
|
||
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* shop archive
|
||
*/
|
||
|
||
if (!function_exists('mfn_shop_archive_tmpl') ) {
|
||
function mfn_shop_archive_tmpl() {
|
||
|
||
|
||
|
||
if( !function_exists('is_woocommerce') ) return false;
|
||
|
||
if( !empty($_GET['mfn-template-id']) && is_numeric( $_GET['mfn-template-id'] ) && get_post_type( $_GET['mfn-template-id'] ) == 'template' && ( get_post_status( $_GET['mfn-template-id'] ) == 'publish' || (!empty($_GET['visual']) && $_GET['visual'] == 'iframe' ) ) ){
|
||
return $_GET['mfn-template-id'];
|
||
}
|
||
|
||
if( !is_woocommerce() || is_admin() ) return false;
|
||
|
||
// wpml fix
|
||
$lang_postfix = '';
|
||
if( defined( 'ICL_SITEPRESS_VERSION' ) ){
|
||
$default_lang = apply_filters('wpml_default_language', NULL );
|
||
$current_lang = apply_filters( 'wpml_current_language', NULL );
|
||
if( !empty($default_lang) && !empty($current_lang) && $current_lang != $default_lang ) $lang_postfix = '_'.$current_lang;
|
||
} else if ( function_exists( 'pll_the_languages' ) ) {
|
||
// polylang
|
||
$current_lang = pll_current_language();
|
||
$default_lang = pll_default_language();
|
||
if( $default_lang != $current_lang ) $lang_postfix = '_'.$current_lang;
|
||
}
|
||
|
||
$qo = get_queried_object();
|
||
|
||
if( isset($qo->term_id) && (is_product_category() || is_product_tag()) ) {
|
||
$term_tmpl = get_term_meta($qo->term_id, 'mfn_shop_template'.$lang_postfix, true);
|
||
if( !empty($term_tmpl) && is_numeric($term_tmpl) && get_post_status( $term_tmpl ) == 'publish' && get_post_type( $term_tmpl ) == 'template' ) {
|
||
return $term_tmpl;
|
||
}
|
||
|
||
if( is_product_category() ){
|
||
$allcats_tmpl = get_option('mfn_shop_archive_tmpl_all_cats'.$lang_postfix);
|
||
if( !empty($allcats_tmpl) && is_numeric($allcats_tmpl) && get_post_status( $allcats_tmpl ) == 'publish' && get_post_type( $allcats_tmpl ) == 'template' ) {
|
||
return $allcats_tmpl;
|
||
}
|
||
}
|
||
|
||
if( is_product_tag() ){
|
||
$alltags_tmpl = get_option('mfn_shop_archive_tmpl_all_tags'.$lang_postfix);
|
||
if( !empty($alltags_tmpl) && is_numeric($alltags_tmpl) && get_post_status( $alltags_tmpl ) == 'publish' && get_post_type( $alltags_tmpl ) == 'template' ) {
|
||
return $alltags_tmpl;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
$shop_id = wc_get_page_id('shop');
|
||
|
||
// wpml fix
|
||
if( !empty($default_lang) && !empty($current_lang) && $current_lang != $default_lang && !empty(apply_filters( 'wpml_object_id', wc_get_page_id('shop'), 'page', null, $current_lang )) && !empty( get_post_meta(apply_filters( 'wpml_object_id', wc_get_page_id('shop'), 'page', null, $current_lang ), 'mfn_shop_template'.'_'.$current_lang, true) ) ){
|
||
return get_post_meta( apply_filters( 'wpml_object_id', wc_get_page_id('shop'), 'page', null, $current_lang ), 'mfn_shop_template'.'_'.$current_lang, true);
|
||
}else if( !empty($default_lang) && !empty($current_lang) && $current_lang != $default_lang && !empty(get_post_meta($shop_id, 'mfn_shop_template'.$lang_postfix)) && get_post_status( get_post_meta($shop_id, 'mfn_shop_template'.$lang_postfix, true) ) == 'publish' ){
|
||
return get_post_meta($shop_id, 'mfn_shop_template'.$lang_postfix, true);
|
||
}else if( !empty(get_post_meta($shop_id, 'mfn_shop_template')) && get_post_status( get_post_meta($shop_id, 'mfn_shop_template', true) ) == 'publish' ){
|
||
return get_post_meta($shop_id, 'mfn_shop_template', true);
|
||
}
|
||
|
||
if( !empty(mfn_opts_get('shop-template')) && get_post_status( mfn_opts_get('shop-template') ) == 'publish' ){
|
||
return mfn_opts_get('shop-template');
|
||
}
|
||
|
||
return false;
|
||
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Single post
|
||
*/
|
||
|
||
if (! function_exists('mfn_single_product_tmpl')) {
|
||
function mfn_single_product_tmpl() {
|
||
|
||
if( !function_exists('is_woocommerce') ) return false;
|
||
|
||
$post_id = get_the_ID();
|
||
|
||
if( !empty($_GET['mfn-template-id']) && is_numeric( $_GET['mfn-template-id'] ) && get_post_type( $_GET['mfn-template-id'] ) == 'template' && ( get_post_status( $_GET['mfn-template-id'] ) == 'publish' || (!empty($_GET['visual']) && $_GET['visual'] == 'iframe' ) ) ){
|
||
return $_GET['mfn-template-id'];
|
||
}
|
||
|
||
if( is_product() ){
|
||
|
||
// wpml fix
|
||
$lang_postfix = '';
|
||
if( defined( 'ICL_SITEPRESS_VERSION' ) ){
|
||
$default_lang = apply_filters('wpml_default_language', NULL );
|
||
$current_lang = apply_filters( 'wpml_current_language', NULL );
|
||
if( !empty($default_lang) && !empty($current_lang) && $current_lang != $default_lang ) $lang_postfix = '_'.$current_lang;
|
||
} else if ( function_exists( 'pll_the_languages' ) ) {
|
||
// polylang
|
||
//if( pll_default_language() != pll_get_post_language( $post_id ) ) $lang_postfix = '_'.pll_get_post_language( $post_id );
|
||
$current_lang = pll_current_language();
|
||
$default_lang = pll_default_language();
|
||
if( $default_lang != $current_lang ) $lang_postfix = '_'.$current_lang;
|
||
}
|
||
|
||
// single product
|
||
if( get_post_meta( $post_id, 'mfn_single_product_template', true ) && get_post_status( get_post_meta( $post_id, 'mfn_single_product_template', true ) ) == 'publish' ){
|
||
return get_post_meta( $post_id, 'mfn_single_product_template', true ); // single product template
|
||
}
|
||
|
||
// cat template
|
||
$cat_tmpl = get_post_meta($post_id, 'mfn_product_cat_template'.$lang_postfix, true);
|
||
if( !empty($cat_tmpl) && is_numeric($cat_tmpl) && get_post_status($cat_tmpl) == 'publish' ){
|
||
return $cat_tmpl;
|
||
}
|
||
|
||
$tag_tmpl = get_post_meta($post_id, 'mfn_product_tag_template'.$lang_postfix, true);
|
||
if( !empty($tag_tmpl) && is_numeric($tag_tmpl) && get_post_status($tag_tmpl) == 'publish' ){
|
||
return $tag_tmpl;
|
||
}
|
||
|
||
/**
|
||
*
|
||
* NEW BASED ON OPTIONS
|
||
* for entire shop, all cats, all tags
|
||
*
|
||
* */
|
||
|
||
if( get_option('mfn_sinle_product_tmpl_all_cats'.$lang_postfix) && get_post_status( get_option('mfn_sinle_product_tmpl_all_cats'.$lang_postfix) ) == 'publish' ) {
|
||
return get_option('mfn_sinle_product_tmpl_all_cats'.$lang_postfix);
|
||
}
|
||
|
||
if( get_option('mfn_sinle_product_tmpl_all_tags'.$lang_postfix) && get_post_status( get_option('mfn_sinle_product_tmpl_all_tags'.$lang_postfix) ) == 'publish' ) {
|
||
return get_option('mfn_sinle_product_tmpl_all_tags'.$lang_postfix);
|
||
}
|
||
|
||
if( get_option('mfn_sinle_product_tmpl_entire_shop'.$lang_postfix) && get_post_status( get_option('mfn_sinle_product_tmpl_entire_shop'.$lang_postfix) ) == 'publish' ) {
|
||
return get_option('mfn_sinle_product_tmpl_entire_shop'.$lang_postfix);
|
||
}
|
||
|
||
/**
|
||
*
|
||
* END
|
||
*
|
||
* */
|
||
|
||
$product_tmpl = get_post_meta($post_id, 'mfn_product_template'.$lang_postfix, true);
|
||
if( $product_tmpl && is_numeric($product_tmpl) && get_post_status( $product_tmpl ) == 'publish' ){
|
||
return $product_tmpl; // shop product template
|
||
}
|
||
|
||
// theme option product template
|
||
|
||
if( mfn_opts_get('shop-product-template') && get_post_status( mfn_opts_get('shop-product-template') ) == 'publish' ) {
|
||
return mfn_opts_get('shop-product-template');
|
||
}
|
||
|
||
return false;
|
||
|
||
}
|
||
|
||
return false;
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Cart, Checkout, Thank You Template
|
||
* */
|
||
if (! function_exists('mfn_endpoint_tmpl')) {
|
||
function mfn_endpoint_tmpl( $type ) {
|
||
|
||
if( !function_exists('is_woocommerce') ) return false;
|
||
if( !is_cart() && !is_checkout() && empty( is_wc_endpoint_url('order-received') ) ) return false;
|
||
|
||
if( !empty($_GET['mfn-template-id']) && mfn_verify_tmpl($_GET['mfn-template-id'], $type) ) {
|
||
return $_GET['mfn-template-id'];
|
||
}
|
||
|
||
$lang_postfix = '';
|
||
|
||
$tmpl_id = get_option('mfn_'.$type.'_template'.$lang_postfix);
|
||
|
||
if( $tmpl_id && mfn_verify_tmpl($tmpl_id, $type) ) {
|
||
return $tmpl_id;
|
||
}
|
||
|
||
return false;
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Single post
|
||
*/
|
||
|
||
if (! function_exists('mfn_single_post_ID')) {
|
||
function mfn_single_post_ID($type) {
|
||
$post_id = get_the_ID();
|
||
|
||
$lang_postfix = '';
|
||
|
||
// wpml fix
|
||
if( defined( 'ICL_SITEPRESS_VERSION' ) ){
|
||
$default_lang = apply_filters('wpml_default_language', NULL );
|
||
$current_lang = apply_filters( 'wpml_current_language', NULL );
|
||
if( !empty($default_lang) && !empty($current_lang) && $current_lang != $default_lang ) $lang_postfix = '_'.$current_lang;
|
||
}else if( function_exists( 'pll_the_languages' ) ) {
|
||
if( pll_default_language() != pll_current_language() ) $lang_postfix = '_'.pll_current_language();
|
||
}
|
||
|
||
if( !empty($_GET['mfn-template-id']) && is_numeric( $_GET['mfn-template-id'] ) && get_post_type( $_GET['mfn-template-id'] ) == 'template' && get_post_meta($_GET['mfn-template-id'], 'mfn_template_type', true) && get_post_meta($_GET['mfn-template-id'], 'mfn_template_type', true) == $type && ( get_post_status( $_GET['mfn-template-id'] ) == 'publish' || (!empty($_GET['visual']) && $_GET['visual'] == 'iframe' ) ) ) {
|
||
return $_GET['mfn-template-id'];
|
||
}
|
||
|
||
// set in post options
|
||
$set_in_postopt = get_post_meta($post_id, 'mfn_single-post_template', true);
|
||
if( !empty( $set_in_postopt ) && is_numeric($set_in_postopt) && get_post_status($set_in_postopt) == 'publish' && get_post_type($set_in_postopt) == 'template' ){
|
||
return $set_in_postopt;
|
||
}
|
||
|
||
$return = array();
|
||
|
||
// conditions
|
||
if( !empty(get_option('mfn_'.$type.'_template'.$lang_postfix)) ){
|
||
$sp_tmpl = get_option('mfn_'.$type.'_template'.$lang_postfix);
|
||
//$post_type = get_post_type($post_id);
|
||
|
||
/*echo '<pre>';
|
||
print_r($sp_tmpl);
|
||
echo '</pre>';*/
|
||
|
||
/*if( !empty($sp_tmpl[$post_type]['all']) && is_array($sp_tmpl[$post_type]['all']) ){
|
||
$return = array_merge($return, $sp_tmpl[$post_type]['all']);
|
||
}*/
|
||
|
||
// All singulars
|
||
if( !empty($sp_tmpl['all']) && is_array($sp_tmpl['all']) ) {
|
||
$return = array_merge($return, $sp_tmpl['all']);
|
||
}
|
||
|
||
$taxoms = array(
|
||
'single-post' => array('category', 'post_tag'),
|
||
'single-portfolio' => array('portfolio-types')
|
||
);
|
||
|
||
if( !empty($taxoms[$type]) && is_array($taxoms[$type]) ){
|
||
foreach($taxoms[$type] as $tax){
|
||
|
||
// any taxonomy
|
||
if( !empty($sp_tmpl[$tax]['all']) && is_array($sp_tmpl[$tax]['all']) ) {
|
||
$return = array_merge($return, $sp_tmpl[$tax]['all']);
|
||
}
|
||
|
||
$terms = get_the_terms( $post_id, $tax );
|
||
|
||
if ( isset($terms) && $terms && !is_wp_error( $terms ) ){
|
||
foreach($terms as $term) {
|
||
|
||
if( !empty($sp_tmpl[$tax][$term->term_id]) && is_array($sp_tmpl[$tax][$term->term_id]) ) {
|
||
foreach ($sp_tmpl[$tax][$term->term_id] as $t => $te) {
|
||
if( !empty($te) && is_numeric($te) ) $return[] = $te;
|
||
}
|
||
}
|
||
|
||
if( isset($sp_tmpl[$tax][$term->term_id]['exclude']) && is_array($sp_tmpl[$tax][$term->term_id]['exclude']) ) {
|
||
|
||
// remove
|
||
foreach( $sp_tmpl[$tax][$term->term_id]['exclude'] as $ex ){
|
||
|
||
foreach( $return as $r=>$ret ){
|
||
if( $ex == $ret ) unset($return[$r]);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
/*echo '<pre>';
|
||
print_r($return);
|
||
echo '</pre>';*/
|
||
|
||
if( !empty($return) && is_array($return) ){
|
||
$return = array_unique($return, SORT_REGULAR);
|
||
return $return[array_key_last($return)];
|
||
}else{
|
||
return false;
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Template Part ID
|
||
*/
|
||
|
||
if (! function_exists('mfn_template_part_ID')) {
|
||
function mfn_template_part_ID( $type, $id = false ) {
|
||
global $post;
|
||
global $wp_query;
|
||
|
||
$return = false;
|
||
$lang_postfix = '';
|
||
$term = false;
|
||
|
||
if( !empty($_GET['mfn-'.$type.'-template']) && is_numeric( $_GET['mfn-'.$type.'-template'] ) && $_GET['mfn-'.$type.'-template'] != '0' && get_post_type( $_GET['mfn-'.$type.'-template'] ) == 'template' && get_post_meta($_GET['mfn-'.$type.'-template'], 'mfn_template_type', true) && get_post_meta($_GET['mfn-'.$type.'-template'], 'mfn_template_type', true) == $type && ( get_post_status( $_GET['mfn-'.$type.'-template'] ) == 'publish' || (!empty($_GET['visual']) && $_GET['visual'] == 'iframe' ) ) ) {
|
||
return $_GET['mfn-'.$type.'-template'];
|
||
}
|
||
|
||
// set in single product || shop arhive template
|
||
if( function_exists('is_woocommerce') && is_woocommerce() ) {
|
||
$tmpl_id = mfn_ID();
|
||
if( !empty($tmpl_id) && get_post_type($tmpl_id) == 'template' && get_post_status($tmpl_id) == 'publish' ){
|
||
$tmpl_part = get_post_meta( $tmpl_id, 'mfn_'.$type.'_template', true );
|
||
if( !empty($tmpl_part) && get_post_type($tmpl_part) == 'template' && get_post_status($tmpl_part) == 'publish' ) return $tmpl_part;
|
||
}
|
||
}
|
||
|
||
// wpml fix
|
||
if( defined( 'ICL_SITEPRESS_VERSION' ) ){
|
||
$default_lang = apply_filters('wpml_default_language', NULL );
|
||
$current_lang = apply_filters( 'wpml_current_language', NULL );
|
||
if( !empty($default_lang) && !empty($current_lang) && $current_lang != $default_lang ) $lang_postfix = '_'.$current_lang;
|
||
}else if( function_exists( 'pll_the_languages' ) ) {
|
||
if( pll_default_language() != pll_current_language() ) $lang_postfix = '_'.pll_current_language();
|
||
}
|
||
|
||
// always 1 newest template is active
|
||
// if excluded we check this one only
|
||
|
||
if( is_search() ){
|
||
$seachpage_part_tmpl = get_option( 'mfn_'.$type.$lang_postfix.'_search_page' );
|
||
if( !empty($seachpage_part_tmpl) && is_numeric( $seachpage_part_tmpl ) && get_post_status( $seachpage_part_tmpl ) == 'publish' && get_post_type( $seachpage_part_tmpl ) == 'template' ){
|
||
return $seachpage_part_tmpl;
|
||
}
|
||
}
|
||
|
||
if( $id || is_singular() || is_search() ){
|
||
|
||
//echo 'is singular';
|
||
$post_id = $id ? $id : get_the_ID();
|
||
$post_type = get_post_type($post_id);
|
||
|
||
if( empty($post_type) || (!empty($post_type) && !in_array($post_type, array('page', 'post', 'offer', 'portfolio', 'product', 'template'))) ) {
|
||
$post_type = 'page';
|
||
}
|
||
|
||
// single post header | set in single post/page edit
|
||
$setin_postedit = get_post_meta( $post_id, 'mfn_'.$type.'_template', true );
|
||
if( $setin_postedit && is_numeric( $setin_postedit ) && get_post_status( $setin_postedit ) == 'publish' && get_post_type( $setin_postedit ) == 'template' )
|
||
return $setin_postedit;
|
||
|
||
$verify_id = mfn_ID();
|
||
|
||
if( !empty($verify_id) && $post_id != $verify_id ) {
|
||
// verify if there is a template
|
||
$setin_postedit = get_post_meta( $verify_id, 'mfn_'.$type.'_template', true );
|
||
if( $setin_postedit && is_numeric( $setin_postedit ) && get_post_status( $setin_postedit ) == 'publish' && get_post_type( $setin_postedit ) == 'template' )
|
||
return $setin_postedit;
|
||
}
|
||
|
||
// post type header
|
||
$single = get_post_meta( $post_id, 'mfn_'.$type.$lang_postfix.'_post', true );
|
||
if( !get_post_meta( $post_id, 'mfn_'.$type.$lang_postfix.'_post_excluded', true ) && $single && is_numeric( $single ) && get_post_status( $single ) == 'publish' && get_post_type( $single ) == 'template' ){
|
||
return $single;
|
||
}
|
||
|
||
// post type all
|
||
$posttype = get_option( 'mfn_'.$type.$lang_postfix.'_'.$post_type.'_single' );
|
||
if( !get_option( 'mfn_'.$type.$lang_postfix.'_'.$post_type.'_single_excluded' ) && $posttype && is_numeric( $posttype ) && get_post_status( $posttype ) == 'publish' && get_post_type( $posttype ) == 'template' ){
|
||
return $posttype;
|
||
}
|
||
|
||
$entire_site = get_option('mfn_'.$type.$lang_postfix.'_entire_site');
|
||
if( !empty($entire_site) && is_numeric($entire_site) && get_post_status($entire_site) == 'publish' && get_post_type($entire_site) == 'template' ){
|
||
if( !apply_filters('bebuilder_preview', false) || get_post_type($post_id) != 'template' || (get_post_type($post_id) == 'template' && in_array(get_post_meta($post_id, 'mfn_template_type', true), array('shop-archive', 'single-product', 'blog'))) ){
|
||
return $entire_site;
|
||
}
|
||
}
|
||
|
||
}else{
|
||
|
||
$verify_id = mfn_ID();
|
||
|
||
if( !empty($verify_id) ) {
|
||
// verify if there is a template
|
||
$setin_postedit = get_post_meta( $verify_id, 'mfn_'.$type.'_template', true );
|
||
if( $setin_postedit && is_numeric( $setin_postedit ) && get_post_status( $setin_postedit ) == 'publish' && get_post_type( $setin_postedit ) == 'template' )
|
||
return $setin_postedit;
|
||
}
|
||
|
||
$queried_obj = get_queried_object();
|
||
|
||
// by term id
|
||
if( isset($queried_obj->term_id) ){
|
||
$term = get_term_meta( $queried_obj->term_id, 'mfn_'.$type.$lang_postfix.'_term', true );
|
||
if( $term && is_numeric( $term ) && get_post_status( $term ) == 'publish' && get_post_type( $term ) == 'template' && empty(get_term_meta( $queried_obj->term_id, 'mfn_'.$type.$lang_postfix.'_term_excluded', true )) )
|
||
return $term;
|
||
}
|
||
|
||
// entire site
|
||
$entire_site = get_option('mfn_'.$type.$lang_postfix.'_entire_site');
|
||
if( !empty($entire_site) && is_numeric($entire_site) && get_post_status($entire_site) == 'publish' && get_post_type($entire_site) == 'template' ){
|
||
$return = $entire_site;
|
||
}
|
||
|
||
// by post type
|
||
|
||
$posttype = false;
|
||
$post_type_name = $lang_postfix.'_post';
|
||
|
||
if( function_exists('is_woocommerce') && is_woocommerce() ){
|
||
$post_type_name = $lang_postfix.'_product';
|
||
}elseif( is_post_type_archive('portfolio') ){
|
||
$post_type_name = $lang_postfix.'_portfolio';
|
||
}elseif( is_post_type_archive('offer') ){
|
||
$post_type_name = $lang_postfix.'_offer';
|
||
}
|
||
|
||
$posttype = get_option( 'mfn_'.$type.$post_type_name.'_arch' );
|
||
if( $posttype && is_numeric( $posttype ) && get_post_status( $posttype ) == 'publish' && empty(get_option( 'mfn_'.$type.$post_type_name.'_arch_excluded' )) ){
|
||
$return = $posttype;
|
||
}
|
||
|
||
if( $posttype && is_numeric( $posttype ) && get_post_status( $posttype ) == 'publish' && !empty($queried_obj->term_id) && get_term_meta( $queried_obj->term_id, 'mfn_'.$type.$lang_postfix.'_term_excluded', true ) ) $return = false;
|
||
|
||
}
|
||
|
||
return $return;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Addons ID
|
||
*/
|
||
if (! function_exists('mfn_addons_ID')) {
|
||
function mfn_addons_ID( $type, $id = false ) {
|
||
global $post;
|
||
global $wp_query;
|
||
|
||
$return = array();
|
||
$langfix = '';
|
||
|
||
// wpml fix
|
||
if( defined( 'ICL_SITEPRESS_VERSION' ) ){
|
||
$default_lang = apply_filters( 'wpml_default_language', NULL );
|
||
$current_lang = apply_filters( 'wpml_current_language', NULL );
|
||
if( !empty($default_lang) && !empty($current_lang) && $current_lang != $default_lang ) $langfix = '_'.$current_lang;
|
||
}else if( function_exists( 'pll_the_languages' ) ) {
|
||
if( pll_default_language() != pll_current_language() ) $langfix = '_'.pll_current_language();
|
||
}
|
||
|
||
if( $id || is_singular() || is_search() ){
|
||
|
||
$post_id = $id ? $id : get_the_ID();
|
||
$post_type = get_post_type($post_id);
|
||
|
||
// seting from page option
|
||
if( !empty( get_post_meta($post_id, 'mfn_popup_included', true) ) ){
|
||
$return[] = get_post_meta($post_id, 'mfn_popup_included', true);
|
||
}
|
||
|
||
$verify_id = mfn_ID();
|
||
|
||
if( !empty($verify_id) && $post_id != $verify_id ) {
|
||
// verify if there is a template
|
||
if( !empty( get_post_meta($verify_id, 'mfn_popup_included', true) ) ){
|
||
$return[] = get_post_meta($verify_id, 'mfn_popup_included', true);
|
||
}
|
||
}
|
||
|
||
$addons = get_option('mfn_'.$type.'_addons_singular'.$langfix);
|
||
|
||
if( $addons ){
|
||
|
||
if( empty($post_type) || (!empty($post_type) && !in_array($post_type, array('page', 'post', 'offer', 'portfolio', 'product', 'template'))) ) {
|
||
$post_type = 'page';
|
||
}
|
||
|
||
// for post type
|
||
if( !empty($addons[$post_type]['all']) ) $return = array_merge($return, $addons[$post_type]['all']);
|
||
|
||
$tax = 'category';
|
||
|
||
if( $post_type == 'product' && function_exists('is_woocommerce') ){
|
||
$tax = 'product_cat';
|
||
}elseif( $post_type == 'portfolio' ){
|
||
$tax = 'portfolio-types';
|
||
}elseif( $post_type == 'offer' ){
|
||
$tax = 'offer-types';
|
||
}
|
||
|
||
$terms = get_the_terms( $post_id, $tax );
|
||
|
||
if ( isset($terms) && $terms && ! is_wp_error( $terms ) ){
|
||
foreach($terms as $term) {
|
||
|
||
if( !empty($addons[$term->term_id]) && is_array($addons[$term->term_id]) ) {
|
||
foreach($addons[$term->term_id] as $a=>$at) {
|
||
$return[] = $at;
|
||
}
|
||
|
||
}
|
||
|
||
if( isset($addons[$term->term_id]['exclude']) && is_array($addons[$term->term_id]['exclude']) ) {
|
||
|
||
// remove
|
||
foreach( $addons[$term->term_id]['exclude'] as $ex ){
|
||
|
||
foreach( $return as $r=>$ret ){
|
||
if( $ex == $ret ) unset($return[$r]);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
}else{
|
||
|
||
$verify_id = mfn_ID();
|
||
|
||
if( !empty($verify_id) ) {
|
||
// verify if there is a template
|
||
if( !empty( get_post_meta($verify_id, 'mfn_popup_included', true) ) ){
|
||
$return[] = get_post_meta($verify_id, 'mfn_popup_included', true);
|
||
}
|
||
}
|
||
|
||
$addons = get_option('mfn_'.$type.'_addons_archives'.$langfix);
|
||
|
||
if( $addons ){
|
||
|
||
if( !empty( $addons['post']['all'] ) && ( is_home() || is_category() || is_author() || is_date() ) ){
|
||
//echo 'blog';
|
||
$return = array_merge($return, $addons['post']['all']);
|
||
}elseif( !empty($addons['product']['all']) && function_exists('is_woocommerce') && is_woocommerce() ){
|
||
//echo 'product';
|
||
$return = array_merge($return, $addons['product']['all']);
|
||
}elseif( !empty($addons['portfolio']['all']) && is_post_type_archive('portfolio') ){
|
||
//echo 'portfolio';
|
||
$return = array_merge($return, $addons['portfolio']['all']);
|
||
}elseif( !empty($addons['offer']['all']) && is_post_type_archive('offer') ){
|
||
//echo 'offer';
|
||
$return = array_merge($return, $addons['offer']['all']);
|
||
}
|
||
|
||
$queried_obj = get_queried_object();
|
||
|
||
if( isset($queried_obj->term_id) ){
|
||
|
||
if( !empty($addons[$queried_obj->term_id]) && is_array($addons[$queried_obj->term_id]) ) {
|
||
foreach($addons[$queried_obj->term_id] as $a=>$at) {
|
||
if( $a != 'excluded' ) {
|
||
//$return = array_merge($return, $at);
|
||
$return[] = $at;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
if( isset($addons[$queried_obj->term_id]['exclude']) && is_array($addons[$queried_obj->term_id]['exclude']) ) {
|
||
|
||
// remove
|
||
foreach( $addons[$queried_obj->term_id]['exclude'] as $ex ) {
|
||
|
||
foreach( $return as $r=>$ret ){
|
||
if( $ex == $ret ) unset($return[$r]);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
return array_unique($return);
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Addons ID
|
||
*/
|
||
|
||
if (! function_exists('mfn_global_sidemenu_id')) {
|
||
function mfn_global_sidemenu_id() {
|
||
|
||
$sm = get_posts( array(
|
||
'post_type' => 'template',
|
||
'meta_key' => 'mfn_sidemenu_visibility',
|
||
'meta_value' => 'always-visible',
|
||
'post_status' => 'publish',
|
||
'posts_per_page' => 1
|
||
) );
|
||
|
||
if( !empty($sm) && !empty($sm[0]->ID) ) return $sm[0]->ID;
|
||
|
||
//print_r($sm);
|
||
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Addons ID
|
||
*/
|
||
|
||
if (! function_exists('mfn_archive_template_id')) {
|
||
function mfn_archive_template_id($type = false) {
|
||
//return 136;
|
||
|
||
if( !empty($_GET['mfn-template-id']) && is_numeric( $_GET['mfn-template-id'] ) && get_post_type( $_GET['mfn-template-id'] ) == 'template' && get_post_meta($_GET['mfn-template-id'], 'mfn_template_type', true) && get_post_meta($_GET['mfn-template-id'], 'mfn_template_type', true) == $type && ( get_post_status( $_GET['mfn-template-id'] ) == 'publish' || (!empty($_GET['visual']) && $_GET['visual'] == 'iframe' ) ) ) {
|
||
return $_GET['mfn-template-id'];
|
||
}
|
||
|
||
$return = array();
|
||
|
||
$lang_postfix = '';
|
||
|
||
if( defined( 'ICL_SITEPRESS_VERSION' ) ){
|
||
$default_lang = apply_filters('wpml_default_language', NULL );
|
||
$current_lang = apply_filters( 'wpml_current_language', NULL );
|
||
if( !empty($default_lang) && !empty($current_lang) && $current_lang != $default_lang ) $lang_postfix = '_'.$current_lang;
|
||
} else if ( function_exists( 'pll_the_languages' ) ) {
|
||
// polylang
|
||
if( pll_default_language() != pll_current_language() ) $lang_postfix = '_'.pll_current_language();
|
||
}
|
||
|
||
// conditions
|
||
if( !empty(get_option('mfn_'.$type.'_template'.$lang_postfix)) ){
|
||
$sp_tmpl = get_option('mfn_'.$type.'_template'.$lang_postfix);
|
||
|
||
// All singulars
|
||
if( !empty($sp_tmpl['all']) && is_array($sp_tmpl['all']) ) {
|
||
$return = array_merge($return, $sp_tmpl['all']);
|
||
}
|
||
|
||
$taxoms = array(
|
||
'blog' => array('category', 'post_tag'),
|
||
'portfolio' => array('portfolio-types')
|
||
);
|
||
|
||
$queried_obj = get_queried_object();
|
||
|
||
if( isset($queried_obj->term_id) ){
|
||
|
||
if( !empty($taxoms[$type]) && is_array($taxoms[$type]) ){
|
||
foreach($taxoms[$type] as $tax){
|
||
|
||
if( !empty($sp_tmpl[$tax][$queried_obj->term_id]) && is_array($sp_tmpl[$tax][$queried_obj->term_id]) ) {
|
||
foreach ($sp_tmpl[$tax][$queried_obj->term_id] as $t => $te) {
|
||
if( $t != 'exclude' ) $return[] = $te;
|
||
}
|
||
}
|
||
|
||
if( !empty($sp_tmpl[$tax]['all']) && is_array($sp_tmpl[$tax]['all']) ) {
|
||
foreach ($sp_tmpl[$tax]['all'] as $t => $te) {
|
||
if( $t != 'exclude' ) $return[] = $te;
|
||
}
|
||
}
|
||
|
||
if( isset($sp_tmpl[$tax][$queried_obj->term_id]['exclude']) && is_array($sp_tmpl[$tax][$queried_obj->term_id]['exclude']) ) {
|
||
|
||
// remove
|
||
foreach( $sp_tmpl[$tax][$queried_obj->term_id]['exclude'] as $ex ){
|
||
|
||
foreach( $return as $r=>$ret ){
|
||
if( $ex == $ret ) unset($return[$r]);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
/*echo '<pre>';
|
||
print_r($return);
|
||
echo '</pre>';*/
|
||
|
||
if( is_array($return) && count($return) > 0 ){
|
||
$return = array_unique($return);
|
||
$last = array_key_last($return);
|
||
if( get_post_status($return[$last]) == 'publish' ){
|
||
return $return[$last];
|
||
}elseif( count($return) > 1 ){
|
||
foreach($return as $r) if( get_post_status($r) == 'publish' ) return $r;
|
||
}else{
|
||
return false;
|
||
}
|
||
}else{
|
||
return false;
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Get blog page ID
|
||
*/
|
||
|
||
if (! function_exists('mfn_get_blog_ID')) {
|
||
function mfn_get_blog_ID(){
|
||
|
||
$id = get_option('page_for_posts');
|
||
|
||
if( ! $id ){
|
||
$id = mfn_opts_get('blog-page');
|
||
}
|
||
|
||
return $id;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Get Layout ID
|
||
*/
|
||
|
||
if (! function_exists('mfn_layout_ID')) {
|
||
function mfn_layout_ID()
|
||
{
|
||
$layoutID = false;
|
||
|
||
if (mfn_ID()) {
|
||
|
||
if (is_single() && get_post_type() == 'post') {
|
||
|
||
// Theme Options | Single Post
|
||
$layoutID = mfn_opts_get('blog-single-layout');
|
||
|
||
} elseif (is_single() && get_post_type() == 'portfolio') {
|
||
|
||
if (get_post_meta(mfn_ID(), 'mfn-post-custom-layout', true)) {
|
||
|
||
// Page Options | Single Portfolio
|
||
$layoutID = get_post_meta(mfn_ID(), 'mfn-post-custom-layout', true);
|
||
|
||
} else {
|
||
|
||
// Theme Options | Single Portfolio
|
||
$layoutID = mfn_opts_get('portfolio-single-layout');
|
||
|
||
}
|
||
|
||
} else {
|
||
|
||
// Page Options | Page
|
||
$layoutID = get_post_meta(mfn_ID(), 'mfn-post-custom-layout', true);
|
||
|
||
}
|
||
|
||
}
|
||
|
||
return $layoutID;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Slider | Isset
|
||
*/
|
||
|
||
if (! function_exists('mfn_slider_isset')) {
|
||
function mfn_slider_isset($id = false)
|
||
{
|
||
$slider = false;
|
||
|
||
// global slider shortcode
|
||
|
||
if (is_page() && mfn_opts_get('slider-shortcode')) {
|
||
return 'global';
|
||
}
|
||
|
||
if ($id || is_home() || is_category() || is_tax() || get_post_type() == 'post' || get_post_type() == 'page' || (get_post_type(mfn_ID()) == 'portfolio' && get_post_meta(mfn_ID(), 'mfn-post-slider-header', true))) {
|
||
|
||
if (! $id) {
|
||
$id = mfn_ID();
|
||
|
||
} // do NOT move it before IF
|
||
|
||
if (get_post_meta($id, 'mfn-post-slider', true)) {
|
||
|
||
// Revolution Slider
|
||
$slider = 'rev';
|
||
|
||
} elseif (get_post_meta($id, 'mfn-post-slider-layer', true)) {
|
||
|
||
// Layer Slider
|
||
$slider = 'layer';
|
||
|
||
} elseif (get_post_meta($id, 'mfn-post-slider-shortcode', true)) {
|
||
|
||
// Custom Slider
|
||
$slider = 'custom';
|
||
|
||
}
|
||
}
|
||
|
||
return $slider;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Slider | Get
|
||
*/
|
||
|
||
if (! function_exists('mfn_slider')) {
|
||
function mfn_slider($id = false)
|
||
{
|
||
$slider = '';
|
||
$slider_type = mfn_slider_isset($id);
|
||
|
||
if (! $id) {
|
||
$id = mfn_ID();
|
||
} // do NOT move it before IF
|
||
|
||
switch ($slider_type) {
|
||
|
||
case 'global':
|
||
$slider = '<div class="mfn-main-slider" id="mfn-global-slider">';
|
||
$slider .= do_shortcode(mfn_opts_get('slider-shortcode'));
|
||
$slider .= '</div>';
|
||
break;
|
||
|
||
case 'rev':
|
||
|
||
if( class_exists('RevSliderFront') ){
|
||
|
||
global $wpdb;
|
||
|
||
$alias = get_post_meta($id, 'mfn-post-slider', true);
|
||
$table_name = $wpdb->prefix . 'revslider_sliders';
|
||
$result = $wpdb->get_var($wpdb->prepare("SELECT id FROM $table_name WHERE alias = %s", $alias));
|
||
|
||
if( $result ){
|
||
$slider = '<div class="mfn-main-slider mfn-rev-slider">';
|
||
$slider .= do_shortcode('[rev_slider '. esc_attr($alias) .']');
|
||
$slider .= '</div>';
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
case 'layer':
|
||
$slider = '<div class="mfn-main-slider mfn-layer-slider">';
|
||
$slider .= do_shortcode('[layerslider id="'. get_post_meta($id, 'mfn-post-slider-layer', true) .'"]');
|
||
$slider .= '</div>';
|
||
break;
|
||
|
||
case 'custom':
|
||
$slider = '<div class="mfn-main-slider" id="mfn-custom-slider">';
|
||
$slider .= do_shortcode(get_post_meta($id, 'mfn-post-slider-shortcode', true));
|
||
$slider .= '</div>';
|
||
break;
|
||
|
||
}
|
||
|
||
return $slider;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Share
|
||
*/
|
||
|
||
if (! function_exists('mfn_share')) {
|
||
function mfn_share($container = false)
|
||
{
|
||
$type = false;
|
||
$class = false;
|
||
|
||
if ( ! mfn_opts_get('share') && 'item' !== $container ) {
|
||
return false;
|
||
}
|
||
|
||
$style = mfn_opts_get('share-style', 'classic');
|
||
|
||
// type
|
||
|
||
if (($container == 'header') && ($style == 'classic')) {
|
||
$type = 'classic';
|
||
}
|
||
|
||
if ($container == 'intro') {
|
||
if ($style == 'simple') {
|
||
$type = 'simple';
|
||
} else {
|
||
$type = 'classic';
|
||
}
|
||
}
|
||
|
||
if (($container == 'footer') && ($style == 'simple')) {
|
||
$type = 'simple';
|
||
}
|
||
|
||
if ($container == 'item') {
|
||
$type = $style;
|
||
$class = 'share_item';
|
||
}
|
||
|
||
// output
|
||
|
||
$output = '';
|
||
|
||
if ($type == 'simple') {
|
||
|
||
// simple
|
||
|
||
$translate['share'] = mfn_opts_get('translate') ? mfn_opts_get('translate-share', 'Share') : __('Share', 'betheme');
|
||
|
||
$output .= '<div class="share-simple-wrapper '. esc_attr($class) .'">';
|
||
|
||
$output .= '<span class="share-label">'. esc_html($translate['share']) .'</span>';
|
||
|
||
$output .= '<div class="icons">';
|
||
$output .= '<a target="_blank" class="facebook" href="https://www.facebook.com/sharer/sharer.php?u='. urlencode(esc_url(get_permalink())) .'"><i class="icon-facebook" aria-label="facebook icon"></i></a>';
|
||
$output .= '<a target="_blank" class="twitter" href="https://twitter.com/intent/tweet?text='. urlencode( esc_attr(wp_get_document_title()) .'. '. esc_url(get_permalink()) ) .'"><i class="icon-x-twitter" aria-label="x twitter icon"></i></a>';
|
||
$output .= '<a target="_blank" class="linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url='. urlencode(esc_url(get_permalink())) .'"><i class="icon-linkedin" aria-label="linkedin icon"></i></a>';
|
||
$output .= '<a target="_blank" class="pinterest" href="https://pinterest.com/pin/find/?url='. urlencode(esc_url(get_permalink())) .'"><i class="icon-pinterest" aria-label="pinterest icon"></i></a>';
|
||
$output .= '</div>';
|
||
|
||
if ($container != 'item') {
|
||
$output .= '<div class="button-love">'. mfn_love() .'</div>';
|
||
}
|
||
|
||
$output .= '</div>';
|
||
|
||
} elseif ($type == 'classic') {
|
||
|
||
// classic
|
||
|
||
wp_enqueue_script('share-this', 'https://ws.sharethis.com/button/buttons.js', false, null, true);
|
||
$share_this_inline = 'stLight.options({publisher:"1390eb48-c3c3-409a-903a-ca202d50de91",doNotHash:false,doNotCopy:false,hashAddressBar:false});';
|
||
wp_add_inline_script('share-this', $share_this_inline);
|
||
|
||
$output .= '<div class="share_wrapper '. esc_attr($class) .'">';
|
||
|
||
$output .= '<span class="st_facebook_vcount"></span>';
|
||
$output .= '<span class="st_twitter_vcount"></span>';
|
||
$output .= '<span class="st_pinterest_vcount"></span>';
|
||
|
||
$output .= '</div>';
|
||
}
|
||
|
||
return $output;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* WP Mobile Detect | Quick FIX: parallax on mobile
|
||
*/
|
||
|
||
if (! function_exists('mfn_is_mobile')) {
|
||
function mfn_is_mobile()
|
||
{
|
||
$mobile = wp_is_mobile();
|
||
|
||
if (mfn_opts_get('responsive-parallax')) {
|
||
$mobile = false;
|
||
}
|
||
|
||
return $mobile;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* User OS
|
||
* @deprecated Be 25.1
|
||
*/
|
||
|
||
if (! function_exists('mfn_user_os')) {
|
||
function mfn_user_os() {
|
||
// use mfn_html_classes() instead
|
||
return mfn_html_classes();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* User Agent | For: Prallax - Safari detect & future use
|
||
*/
|
||
|
||
if (! function_exists('mfn_user_agent')) {
|
||
function mfn_user_agent()
|
||
{
|
||
$user_agent = $_SERVER['HTTP_USER_AGENT']; // context is safe and necessary
|
||
|
||
if (stripos($user_agent, 'Chrome/') !== false) {
|
||
$user_agent = 'chrome';
|
||
} elseif ((stripos($user_agent, 'Safari/') !== false) && (stripos($user_agent, 'Mobile/') !== false)) {
|
||
$user_agent = 'safari mobile';
|
||
} elseif (stripos($user_agent, 'Safari/') !== false) {
|
||
$user_agent = 'safari';
|
||
} else {
|
||
|
||
// for future use
|
||
$user_agent = false;
|
||
}
|
||
|
||
return $user_agent;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Show user icon
|
||
*/
|
||
|
||
if (! function_exists('mfn_user_icon')) {
|
||
function mfn_user_icon( $user_icon = false ){
|
||
if( $user_icon ){
|
||
echo '<i class="'. $user_icon .'" aria-label="user icon"></i>';
|
||
} else {
|
||
echo '<svg width="26" viewBox="0 0 26 26" aria-label="user icon"><defs><style>.path{fill:none;stroke:#333333;stroke-width:1.5px;}</style></defs><circle class="path" cx="13" cy="9.7" r="4.1"/><path class="path" d="M19.51,18.1v2.31h-13V18.1c0-2.37,2.92-4.3,6.51-4.3S19.51,15.73,19.51,18.1Z"/></svg>';
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Paralllax | Plugin
|
||
*/
|
||
|
||
if (! function_exists('mfn_parallax_plugin')) {
|
||
function mfn_parallax_plugin()
|
||
{
|
||
$parallax = mfn_opts_get('parallax');
|
||
|
||
if ($parallax == 'translate3d no-safari') {
|
||
if (mfn_user_agent() == 'safari') {
|
||
$parallax = 'enllax';
|
||
} else {
|
||
$parallax = 'translate3d';
|
||
}
|
||
}
|
||
|
||
return $parallax;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Paralllax | Code - Section & wrapper background
|
||
*/
|
||
|
||
if (! function_exists('mfn_parallax_data')) {
|
||
function mfn_parallax_data()
|
||
{
|
||
$parallax = mfn_parallax_plugin();
|
||
|
||
if ($parallax == 'translate3d') {
|
||
$parallax = 'data-parallax="3d"';
|
||
} elseif ($parallax == 'stellar') {
|
||
$parallax = 'data-stellar-background-ratio="0.5"';
|
||
} else {
|
||
$parallax = 'data-enllax-ratio="-0.3"';
|
||
}
|
||
|
||
return $parallax;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Pagination for Blog and Portfolio
|
||
*/
|
||
|
||
if (! function_exists('mfn_pagination')) {
|
||
function mfn_pagination($query = false, $load_more = false)
|
||
{
|
||
global $wp_query;
|
||
$paged = (get_query_var('paged')) ? get_query_var('paged') : ((get_query_var('page')) ? get_query_var('page') : 1);
|
||
|
||
// default $wp_query
|
||
|
||
if (! $query) {
|
||
$query = $wp_query;
|
||
}
|
||
|
||
$translate['prev'] = mfn_opts_get('translate') ? mfn_opts_get('translate-prev', '‹ Prev page') : __('Prev page', 'betheme');
|
||
$translate['next'] = mfn_opts_get('translate') ? mfn_opts_get('translate-next', 'Next page ›') : __('Next page', 'betheme');
|
||
$translate['load-more'] = mfn_opts_get('translate') ? mfn_opts_get('translate-load-more', 'Load more') : __('Load more', 'betheme');
|
||
|
||
isset($query->query_vars['paged']) && $query->query_vars['paged'] > 1 ? $current = $query->query_vars['paged'] : $current = 1;
|
||
|
||
if (empty($paged)) {
|
||
$paged = 1;
|
||
}
|
||
$prev = $paged - 1;
|
||
$next = $paged + 1;
|
||
|
||
$end_size = 1;
|
||
$mid_size = 2;
|
||
$show_all = mfn_opts_get('pagination-show-all');
|
||
$dots = false;
|
||
|
||
if (! $total = $query->max_num_pages) {
|
||
$total = 1;
|
||
}
|
||
|
||
$output = '';
|
||
|
||
if ($total > 1) {
|
||
|
||
if ($load_more) {
|
||
|
||
// load more
|
||
|
||
if ($paged < $total) {
|
||
$output .= '<div class="column one pager_wrapper pager_lm">';
|
||
$output .= '<a rel="next" class="pager_load_more button has-icon" href="'. esc_url(get_pagenum_link($next) ).'">';
|
||
$output .= '<span class="button_icon"><i class="icon-layout" aria-hidden="true"></i></span>';
|
||
$output .= '<span class="button_label">'. esc_html($translate['load-more']) .'</span>';
|
||
$output .= '</a>';
|
||
$output .= '</div>';
|
||
}
|
||
|
||
} else {
|
||
|
||
// default
|
||
|
||
$output .= '<div class="column one pager_wrapper">';
|
||
$output .= '<div class="pager">';
|
||
|
||
if ($paged >1) {
|
||
$output .= '<a rel="prev" class="prev_page" href="'. esc_url(get_pagenum_link($prev)) .'"><i class="icon-left-open" aria-hidden="true"></i>'. esc_html($translate['prev']) .'</a>';
|
||
}
|
||
|
||
$output .= '<div class="pages">';
|
||
for ($i=1; $i <= $total; $i++) {
|
||
if ($i == $current) {
|
||
$output .= '<a href="'. esc_url(get_pagenum_link($i)) .'" class="page active">'. esc_html($i) .'</a>';
|
||
$dots = true;
|
||
} else {
|
||
if ($show_all || ($i <= $end_size || ($current && $i >= $current - $mid_size && $i <= $current + $mid_size) || $i > $total - $end_size)) {
|
||
$output .= '<a href="'. esc_url(get_pagenum_link($i)) .'" class="page">'. esc_html($i) .'</a>';
|
||
$dots = true;
|
||
} elseif ($dots && ! $show_all) {
|
||
$output .= '<span class="page">...</span>';
|
||
$dots = false;
|
||
}
|
||
}
|
||
}
|
||
$output .= '</div>';
|
||
|
||
if ($paged < $total) {
|
||
$output .= '<a rel="next" class="next_page" href="'. esc_url(get_pagenum_link($next)) .'">'. esc_html($translate['next']) .'<i class="icon-right-open" aria-hidden="true"></i></a>';
|
||
}
|
||
|
||
$output .= '</div>';
|
||
$output .= '</div>'."\n";
|
||
|
||
}
|
||
|
||
}
|
||
return $output;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Current page URL
|
||
*/
|
||
|
||
if (! function_exists('mfn_current_URL')) {
|
||
function mfn_current_URL()
|
||
{
|
||
$env = $_SERVER; // context is safe and necessary
|
||
|
||
$pageURL = 'http';
|
||
if (is_ssl()) {
|
||
$pageURL .= 's';
|
||
}
|
||
|
||
$pageURL .= '://';
|
||
|
||
if( in_array( $env['SERVER_PORT'], array(80, 443) ) ){
|
||
$pageURL .= $env['SERVER_NAME'].$env['REQUEST_URI'];
|
||
} else {
|
||
$pageURL .= $env['SERVER_NAME'] .':'. $env['SERVER_PORT'].$env['REQUEST_URI'];
|
||
}
|
||
|
||
return $pageURL;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Subheader | Page Title
|
||
*/
|
||
|
||
if (! function_exists('mfn_page_title')) {
|
||
function mfn_page_title($echo = false)
|
||
{
|
||
if (is_home()) {
|
||
|
||
// blog
|
||
$title = get_the_title(mfn_get_blog_ID());
|
||
|
||
} elseif ( is_category() ) {
|
||
|
||
$title = single_cat_title( '', false );
|
||
|
||
} elseif ( is_tag() ) {
|
||
|
||
$title = single_tag_title( '', false );
|
||
|
||
} elseif ( is_author() ) {
|
||
|
||
$title = get_the_author();
|
||
|
||
} elseif ( is_year() ) {
|
||
|
||
$title = get_the_time( 'Y' );
|
||
|
||
} elseif ( is_month() ) {
|
||
|
||
$title = get_the_time( 'F Y' );
|
||
|
||
} elseif ( is_day() ) {
|
||
|
||
$title = get_the_time( 'F j, Y' );
|
||
|
||
} elseif ( is_post_type_archive() ) {
|
||
|
||
$title = post_type_archive_title( '', false );
|
||
|
||
} elseif ( is_page() && get_the_ID() == mfn_opts_get('portfolio-page') ) {
|
||
|
||
$title = get_the_title(get_the_ID());
|
||
|
||
} elseif ( is_single() || is_page() ) {
|
||
|
||
$tmp_id = mfn_ID();
|
||
if( get_post_type($tmp_id) == 'template' ) $tmp_id = get_the_ID();
|
||
|
||
$title = get_the_title($tmp_id);
|
||
|
||
} elseif (get_post_taxonomies()) {
|
||
|
||
$title = single_cat_title('', false);
|
||
|
||
} elseif (function_exists('tribe_is_month') && (tribe_is_event_query() || tribe_is_month() || tribe_is_event() || tribe_is_day() || tribe_is_venue())) {
|
||
|
||
// The Events Calendar
|
||
$title = tribe_get_events_title();
|
||
|
||
} else {
|
||
|
||
$title = get_the_title(mfn_ID());
|
||
|
||
}
|
||
|
||
if ($echo) {
|
||
echo wp_kses($title, mfn_allowed_html());
|
||
}
|
||
|
||
return $title;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Breadcrumbs
|
||
*/
|
||
|
||
if (! function_exists('mfn_breadcrumbs')) {
|
||
function mfn_breadcrumbs($params = false)
|
||
{
|
||
global $post;
|
||
|
||
$breadcrumbs = array();
|
||
$separator = ' <span class="mfn-breadcrumbs-separator"><i class="icon-right-open"></i></span>';
|
||
|
||
$class = 'no-link';
|
||
|
||
if( !empty($params['classes']) ) $class = $params['classes'];
|
||
|
||
if( !empty($params['separator']) ) $separator = '<span class="mfn-breadcrumbs-separator">'.$params['separator'].'</span>';
|
||
|
||
// translate
|
||
|
||
$translate['home'] = mfn_opts_get('translate') ? mfn_opts_get('translate-home', 'Home') : __('Home', 'betheme');
|
||
|
||
// plugin: bbPress
|
||
|
||
if(function_exists('is_bbpress') && is_bbpress()) {
|
||
bbp_breadcrumb( array(
|
||
'before' => '<ul class="breadcrumbs">',
|
||
'after' => '</ul>',
|
||
'sep' => '<i class="icon-right-open" aria-label="breadcrumbs separator"></i>',
|
||
'crumb_before' => '<li>',
|
||
'crumb_after' => '</li>',
|
||
'home_text' => esc_html($translate['home']),
|
||
) );
|
||
return true; // exit
|
||
}
|
||
|
||
// home prefix
|
||
|
||
if( !isset($params['include_home']) || empty($params['include_home']) ) $breadcrumbs[] = '<a href="'. esc_attr(home_url()) .'">'. esc_html($translate['home']) .'</a>';
|
||
|
||
// blog
|
||
|
||
if ( 'post' == get_post_type() ) {
|
||
|
||
$blogID = false;
|
||
|
||
if (get_option('page_for_posts')) {
|
||
$blogID = get_option('page_for_posts'); // Setings / Reading
|
||
}
|
||
|
||
if ($blogID) {
|
||
$blog_post = get_post($blogID);
|
||
|
||
// blog page has parent
|
||
|
||
if ($blog_post && $blog_post->post_parent) {
|
||
|
||
$parent_id = $blog_post->post_parent;
|
||
$parents = array();
|
||
|
||
while ($parent_id) {
|
||
$page = get_page($parent_id);
|
||
$parents[] = '<a href="'. get_permalink($page->ID) .'">'. wp_kses(get_the_title($page->ID), mfn_allowed_html()) .'</a>';
|
||
$parent_id = $page->post_parent;
|
||
}
|
||
|
||
$parents = array_reverse($parents);
|
||
$breadcrumbs = array_merge_recursive($breadcrumbs, $parents);
|
||
}
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_permalink($blogID)) .'">'. wp_kses(get_the_title($blogID), mfn_allowed_html()) .'</a>';
|
||
}
|
||
}
|
||
|
||
if ( is_front_page() || is_home() ) {
|
||
|
||
// do nothing
|
||
|
||
} elseif (function_exists('tribe_is_event') && (tribe_is_event_query() || tribe_is_event() || tribe_is_venue())) {
|
||
|
||
// plugin: Events Calendar
|
||
|
||
if (function_exists('tribe_get_events_link')) {
|
||
$breadcrumbs[] = '<a href="'. esc_url(tribe_get_events_link()) .'">'. esc_html(tribe_get_events_title()) .'</a>';
|
||
}
|
||
|
||
} elseif ( function_exists('is_woocommerce') && is_woocommerce() ) {
|
||
|
||
$qo = get_queried_object();
|
||
|
||
if( is_product() ){
|
||
|
||
$p_terms = get_the_terms( $post->ID, 'product_cat' );
|
||
|
||
if( !empty( wc_get_page_id( 'shop' ) ) ){
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_permalink(wc_get_page_id( 'shop' ))) .'">'. esc_html(get_the_title(wc_get_page_id( 'shop' ))) .'</a>';
|
||
}
|
||
|
||
$terms = get_the_terms(get_the_ID(), 'product_cat');
|
||
if (! empty($terms) && ! is_wp_error($terms)) {
|
||
$breadcrumbs[] = get_term_parents_list($terms[0], 'product_cat', array('separator' => $separator ));
|
||
}
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_permalink()) .'">'. wp_kses(get_the_title(), mfn_allowed_html()) .'</a>';
|
||
|
||
}elseif( is_shop() ){
|
||
|
||
if( !empty( wc_get_page_id( 'shop' ) ) ){
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_permalink(wc_get_page_id( 'shop' ))) .'">'. esc_html(get_the_title(wc_get_page_id( 'shop' ))) .'</a>';
|
||
}
|
||
|
||
}else if( isset($qo->term_id) && (is_product_category() || is_product_tag()) ) {
|
||
|
||
if( !empty( wc_get_page_id( 'shop' ) ) ){
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_permalink(wc_get_page_id( 'shop' ))) .'">'. esc_html(get_the_title(wc_get_page_id( 'shop' ))) .'</a>';
|
||
}
|
||
|
||
if( is_product_category() ){
|
||
$ancestors = get_ancestors($qo->term_id, 'product_cat');
|
||
|
||
if (!empty($ancestors)) {
|
||
$ancestors = array_reverse($ancestors);
|
||
foreach ($ancestors as $ancestor_id) {
|
||
$ancestor = get_term($ancestor_id, 'product_cat');
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_term_link($ancestor_id)) .'">'. esc_html($ancestor->name) .'</a>';
|
||
}
|
||
}
|
||
}
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_term_link($qo->term_id)) .'">'. esc_html($qo->name) .'</a>';
|
||
|
||
}
|
||
|
||
} elseif ( is_category() ) {
|
||
|
||
$cat = get_term_by('name', single_cat_title('', false), 'category');
|
||
if ($cat && $cat->parent) {
|
||
$breadcrumbs[] = get_category_parents($cat->parent, true, $separator);
|
||
}
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(mfn_current_URL()) .'">'. esc_html(single_cat_title('', false)) .'</a>';
|
||
|
||
} elseif ( is_tag() ) {
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(mfn_current_URL()) .'">'. esc_html(single_tag_title('', false)) . '</a>';
|
||
|
||
} elseif ( is_author() ) {
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(mfn_current_URL()) .'">'. esc_html(get_the_author()) .'</a>';
|
||
|
||
} elseif ( is_year() ) {
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(mfn_current_URL()) .'">'. esc_html(get_the_time('Y')) .'</a>';
|
||
|
||
} elseif ( is_month() ) {
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_year_link(get_the_time('Y'))) .'">' . esc_html(get_the_time('Y')) . '</a>';
|
||
$breadcrumbs[] = '<a href="'. esc_url(mfn_current_URL()) .'">'. esc_html(get_the_time('F')) .'</a>';
|
||
|
||
} elseif ( is_day() ) {
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_year_link(get_the_time('Y'))) . '">'. esc_html( get_the_time('Y') ) .'</a>';
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_month_link(get_the_time('Y'), get_the_time('m'))) .'">'. esc_html( get_the_time('F') ) .'</a>';
|
||
$breadcrumbs[] = '<a href="'. esc_url(mfn_current_URL()) .'">'. esc_html( get_the_time('d') ) .'</a>';
|
||
|
||
} elseif ( is_post_type_archive() ) {
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url( mfn_current_URL() ) .'">'. esc_html( post_type_archive_title( '', false ) ) .'</a>';
|
||
|
||
} elseif (is_single() && ! is_attachment()) {
|
||
|
||
if ( 'post' != get_post_type() ) {
|
||
|
||
// portfolio
|
||
|
||
$post_type = get_post_type_object(get_post_type());
|
||
$slug = $post_type->rewrite;
|
||
$portfolio_page_id = mfn_wpml_ID(mfn_opts_get('portfolio-page'));
|
||
|
||
// portfolio page
|
||
|
||
if ($slug && $slug['slug'] == mfn_opts_get('portfolio-slug', 'portfolio-item') && $portfolio_page_id) {
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_page_link($portfolio_page_id)) .'">'. esc_html(get_the_title($portfolio_page_id)) .'</a>';
|
||
}
|
||
|
||
// category
|
||
|
||
if ($portfolio_page_id) {
|
||
$terms = get_the_terms(get_the_ID(), 'portfolio-types');
|
||
if (! empty($terms) && ! is_wp_error($terms)) {
|
||
$breadcrumbs[] = get_term_parents_list($terms[0], 'portfolio-types', array('separator' => $separator ));
|
||
}
|
||
}
|
||
|
||
// single
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(mfn_current_URL()) .'">'. get_the_title().'</a>';
|
||
|
||
} else {
|
||
|
||
// blog single
|
||
|
||
$cat = get_the_category();
|
||
if (! empty($cat)) {
|
||
$breadcrumbs[] = get_category_parents($cat[0], true, $separator);
|
||
}
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(mfn_current_URL()) .'">'. get_the_title() .'</a>';
|
||
}
|
||
|
||
} elseif (! is_page() && get_post_taxonomies()) {
|
||
|
||
// taxonomy portfolio
|
||
|
||
$post_type = get_post_type_object(get_post_type());
|
||
if ($post_type->name == 'portfolio' && $portfolio_page_id = mfn_wpml_ID(mfn_opts_get('portfolio-page'))) {
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_page_link($portfolio_page_id)) .'">'. esc_html(get_the_title($portfolio_page_id)) .'</a>';
|
||
}
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(mfn_current_URL()) .'">'. esc_html(single_cat_title('', false)) .'</a>';
|
||
|
||
} elseif (is_page() && $post->post_parent) {
|
||
|
||
// page with parent
|
||
|
||
$parent_id = $post->post_parent;
|
||
$parents = array();
|
||
|
||
while ($parent_id) {
|
||
$page = get_page($parent_id);
|
||
$parents[] = '<a href="'. esc_url(get_permalink($page->ID)) .'">'. wp_kses(get_the_title($page->ID), mfn_allowed_html()) .'</a>';
|
||
$parent_id = $page->post_parent;
|
||
}
|
||
|
||
$parents = array_reverse($parents);
|
||
$breadcrumbs = array_merge_recursive($breadcrumbs, $parents);
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_permalink($post->ID)) .'">'. wp_kses(get_the_title(mfn_ID()), mfn_allowed_html()) .'</a>';
|
||
|
||
// } elseif (function_exists('tribe_is_month') && (tribe_is_event_query() || tribe_is_month() || tribe_is_event() || tribe_is_day() || tribe_is_venue())) {
|
||
//
|
||
// // plugin: Events Calendar
|
||
//
|
||
// if (function_exists('tribe_get_events_link')) {
|
||
// $breadcrumbs[] = '<a href="'. esc_url(tribe_get_events_link()) .'">'. esc_html(tribe_get_events_title()) .'</a>';
|
||
// }
|
||
|
||
} elseif( $post ) {
|
||
|
||
// default
|
||
|
||
$breadcrumbs[] = '<a href="'. esc_url(get_permalink($post->ID)) .'">'. wp_kses(get_the_title(mfn_ID()), mfn_allowed_html()) .'</a>';
|
||
|
||
}
|
||
|
||
// output -----
|
||
|
||
echo '<ul class="breadcrumbs '. esc_attr($class) .'">';
|
||
|
||
$count = count($breadcrumbs);
|
||
$i = 1;
|
||
|
||
foreach ($breadcrumbs as $bk => $bc) {
|
||
|
||
if (strpos($bc, $separator)) {
|
||
|
||
// category parent
|
||
|
||
echo '<li>'. $bc .'</li>';
|
||
|
||
} else {
|
||
|
||
if ($i == $count) {
|
||
$separator = '';
|
||
}
|
||
echo '<li>'. $bc . $separator .'</li>';
|
||
|
||
}
|
||
|
||
$i++;
|
||
}
|
||
|
||
echo '</ul>';
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Hex 2 rgba
|
||
*/
|
||
|
||
if (! function_exists('mfn_hex2rgba')) {
|
||
function mfn_hex2rgba($hex, $alpha = 1, $echo = false)
|
||
{
|
||
if( strpos($hex, 'rgb') !== false ){
|
||
return $hex;
|
||
}
|
||
|
||
if( strpos($hex, 'var(') !== false ){
|
||
return $hex;
|
||
}
|
||
|
||
$hex = str_replace("#", "", $hex);
|
||
|
||
if (strlen($hex) == 3) {
|
||
$r = hexdec(substr($hex, 0, 1).substr($hex, 0, 1));
|
||
$g = hexdec(substr($hex, 1, 1).substr($hex, 1, 1));
|
||
$b = hexdec(substr($hex, 2, 1).substr($hex, 2, 1));
|
||
} else {
|
||
$r = hexdec(substr($hex, 0, 2));
|
||
$g = hexdec(substr($hex, 2, 2));
|
||
$b = hexdec(substr($hex, 4, 2));
|
||
}
|
||
|
||
$rgba = 'rgba('. $r.','. $g .','. $b .','. $alpha .')';
|
||
|
||
if ($echo) {
|
||
echo esc_attr($rgba);
|
||
return true;
|
||
}
|
||
|
||
return $rgba;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Is dark color
|
||
*/
|
||
|
||
if (! function_exists('mfn_brightness')) {
|
||
function mfn_brightness( $hex, $tolerance = 169, $oposite_color = false )
|
||
{
|
||
if( ! $hex ){
|
||
return false;
|
||
}
|
||
|
||
$hex = str_replace("#", "", $hex);
|
||
|
||
if( 6 != strlen( $hex ) ){
|
||
return false;
|
||
}
|
||
|
||
$r = hexdec(substr($hex, 0, 2));
|
||
$g = hexdec(substr($hex, 2, 2));
|
||
$b = hexdec(substr($hex, 4, 2));
|
||
|
||
$brightness = (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
|
||
|
||
if ($brightness > $tolerance) {
|
||
$brightness = 'light';
|
||
} else {
|
||
$brightness = 'dark';
|
||
}
|
||
|
||
if ($oposite_color) {
|
||
if ($brightness == 'light') {
|
||
$brightness = 'black';
|
||
} else {
|
||
$brightness = 'white';
|
||
}
|
||
}
|
||
|
||
return $brightness;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* jPlayer HTML
|
||
*/
|
||
|
||
if (! function_exists('mfn_jplayer_html')) {
|
||
function mfn_jplayer_html($video_m4v, $poster = false)
|
||
{
|
||
$player_id = mt_rand(0, 999);
|
||
|
||
$output = '<div id="jp_container_'. esc_attr($player_id) .'" class="jp-video mfn-jcontainer">';
|
||
$output .= '<div class="jp-type-single">';
|
||
$output .= '<div id="jquery_jplayer_'. esc_attr($player_id) .'" class="jp-jplayer mfn-jplayer" data-m4v="'. esc_url($video_m4v) .'" data-img="'. esc_url($poster) .'" data-swf="'. get_theme_file_uri('/assets/jplayer') .'"></div>';
|
||
$output .= '<div class="jp-gui">';
|
||
$output .= '<div class="jp-video-play">';
|
||
$output .= '<a href="javascript:;" class="jp-video-play-icon" tabindex="1">play</a>';
|
||
$output .= '</div>';
|
||
$output .= '<div class="jp-interface">';
|
||
$output .= '<div class="jp-progress">';
|
||
$output .= '<div class="jp-seek-bar">';
|
||
$output .= '<div class="jp-play-bar"></div>';
|
||
$output .= '</div>';
|
||
$output .= '</div>';
|
||
$output .= '<div class="jp-current-time"></div>';
|
||
$output .= '<div class="jp-duration"></div>';
|
||
$output .= '<div class="jp-controls-holder">';
|
||
$output .= '<ul class="jp-controls">';
|
||
$output .= '<li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li>';
|
||
$output .= '<li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li>';
|
||
$output .= '<li><a href="javascript:;" class="jp-stop" tabindex="1">stop</a></li>';
|
||
$output .= '<li><a href="javascript:;" class="jp-mute" tabindex="1" title="mute">mute</a></li>';
|
||
$output .= '<li><a href="javascript:;" class="jp-unmute" tabindex="1" title="unmute">unmute</a></li>';
|
||
$output .= '<li><a href="javascript:;" class="jp-volume-max" tabindex="1" title="max volume">max volume</a></li>';
|
||
$output .= '</ul>';
|
||
$output .= '<div class="jp-volume-bar"><div class="jp-volume-bar-value"></div></div>';
|
||
$output .= '<ul class="jp-toggles">';
|
||
$output .= '<li><a href="javascript:;" class="jp-full-screen" tabindex="1" title="full screen">full screen</a></li>';
|
||
$output .= '<li><a href="javascript:;" class="jp-restore-screen" tabindex="1" title="restore screen">restore screen</a></li>';
|
||
$output .= '<li><a href="javascript:;" class="jp-repeat" tabindex="1" title="repeat">repeat</a></li>';
|
||
$output .= '<li><a href="javascript:;" class="jp-repeat-off" tabindex="1" title="repeat off">repeat off</a></li>';
|
||
$output .= '</ul>';
|
||
$output .= '</div>';
|
||
$output .= '<div class="jp-title"><ul><li>jPlayer Video Title</li></ul></div>';
|
||
$output .= '</div>';
|
||
$output .= '</div>';
|
||
$output .= '<div class="jp-no-solution"><span>Update Required</span>To play the media you will need to either update your browser to a recent version or update your <a href="https://get.adobe.com/flashplayer/" target="_blank">Flash plugin</a></div>';
|
||
$output .= '</div>';
|
||
$output .= '</div>'."\n";
|
||
|
||
return $output;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* jPlayer
|
||
*/
|
||
|
||
if (! function_exists('mfn_jplayer')) {
|
||
function mfn_jplayer($postID, $sizeH = 'full')
|
||
{
|
||
// masonry square video fix
|
||
|
||
if ( $sizeH == 'blog-masonry' ) {
|
||
$sizeH = 'blog-square';
|
||
}
|
||
|
||
$video_m4v = get_post_meta( $postID, 'mfn-post-video-mp4', true );
|
||
|
||
$poster = wp_get_attachment_image_src( get_post_thumbnail_id( $postID ), $sizeH );
|
||
|
||
if( ! empty($poster[0]) ){
|
||
$poster = $poster[0];
|
||
} else {
|
||
$poster = '';
|
||
}
|
||
|
||
$theme_disable = mfn_opts_get( 'theme-disable' );
|
||
|
||
if ( isset( $theme_disable[ 'html5-player' ] ) ) {
|
||
|
||
$output = '<video preload="metadata" poster="'. esc_url( $poster ) .'" controls="1" style="max-width:100%">';
|
||
$output .= '<source type="video/mp4" src="'. esc_url( $video_m4v ) .'" />';
|
||
$output .= '</video>';
|
||
|
||
} else {
|
||
|
||
$output = mfn_jplayer_html( $video_m4v, $poster );
|
||
|
||
}
|
||
|
||
return $output;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Post Format
|
||
*/
|
||
|
||
if (! function_exists('mfn_post_format')) {
|
||
function mfn_post_format($postID)
|
||
{
|
||
if (get_post_type($postID) == 'portfolio' && is_single($postID)) {
|
||
|
||
// portfolio
|
||
|
||
if (get_post_meta(get_the_ID(), 'mfn-post-video', true)) {
|
||
|
||
// video: embed
|
||
$format = 'video';
|
||
|
||
} elseif (get_post_meta(get_the_ID(), 'mfn-post-video-mp4', true)) {
|
||
|
||
// video: HTML5
|
||
$format = 'video';
|
||
|
||
} else {
|
||
|
||
// image
|
||
$format = false;
|
||
|
||
}
|
||
|
||
} else {
|
||
|
||
// blog
|
||
$format = get_post_format($postID);
|
||
|
||
}
|
||
|
||
return $format;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check if we use lazy load images
|
||
*/
|
||
|
||
if (! function_exists('mfn_is_lazy')) {
|
||
function mfn_is_lazy( $lazy_load = false ){
|
||
|
||
if ( ! empty($_GET['visual']) || wp_doing_ajax() ){
|
||
return false; // disable lazy load in Bebuilder
|
||
}
|
||
|
||
if( 'disable' == $lazy_load ){
|
||
$lazy = false;
|
||
} elseif( 'lazy' == $lazy_load ){
|
||
$lazy = true;
|
||
} elseif( 'lazy' == mfn_opts_get('lazy-load') ){
|
||
$lazy = true;
|
||
} else {
|
||
$lazy = false;
|
||
}
|
||
|
||
return $lazy;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Attachment | GET attachment
|
||
*/
|
||
|
||
if (! function_exists('mfn_get_attachment')) {
|
||
function mfn_get_attachment( $src, $size = false, $lazy_load = false, $attr = NULL ){
|
||
|
||
if( ! $size ){
|
||
$size = 'full';
|
||
}
|
||
|
||
if( strpos($src, '#') !== false ){
|
||
|
||
$explode_src = explode('#', $src);
|
||
|
||
if( isset( $explode_src[1] ) && is_numeric( $explode_src[1] ) ){
|
||
$src = $explode_src[1];
|
||
}
|
||
|
||
}
|
||
|
||
if( ! is_numeric( $src ) ){
|
||
|
||
$attachment_id = mfn_get_attachment_id_url( $src );
|
||
if( $attachment_id ){
|
||
$src = $attachment_id;
|
||
}
|
||
|
||
}
|
||
|
||
if( is_numeric( $src ) ){
|
||
|
||
$src = apply_filters( 'wpml_object_id', $src, 'attachment', true );
|
||
|
||
if( ! empty($lazy_load) && 'disable' == $lazy_load ){
|
||
|
||
if( apply_filters( 'wp_lazy_loading_enabled', true, NULL, NULL ) ){
|
||
$lazy_status = '__return_true';
|
||
} else {
|
||
$lazy_status = '__return_false';
|
||
}
|
||
|
||
// disable lazy load for specified image
|
||
remove_filter( 'wp_lazy_loading_enabled', '__return_true' );
|
||
add_filter( 'wp_lazy_loading_enabled', '__return_false' );
|
||
$image_output = wp_get_attachment_image( $src, $size, false, $attr );
|
||
add_filter( 'wp_lazy_loading_enabled', $lazy_status );
|
||
|
||
} else {
|
||
|
||
$image_output = wp_get_attachment_image( $src, $size, false, $attr );
|
||
|
||
}
|
||
|
||
return $image_output;
|
||
|
||
}
|
||
|
||
return false;
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Attachment | GET attachment ID by URL
|
||
*/
|
||
|
||
if (! function_exists('mfn_get_attachment_id_url')) {
|
||
function mfn_get_attachment_id_url($image_url){
|
||
|
||
if( empty($image_url) ) return '';
|
||
|
||
$position = strpos($image_url, '#');
|
||
if ($position !== false) {
|
||
$image_url = substr($image_url, 0, $position);
|
||
}
|
||
|
||
return attachment_url_to_postid($image_url);
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Attachment | GET attachment data
|
||
*/
|
||
|
||
if ( ! function_exists( 'mfn_get_attachment_data' ) ) {
|
||
function mfn_get_attachment_data( $image, $data, $with_key = false )
|
||
{
|
||
$return = false;
|
||
$size = false;
|
||
|
||
if( empty($image) ) return '';
|
||
|
||
if( strpos($image, '#') !== false ){
|
||
|
||
$explode_src = explode('#', $image);
|
||
|
||
if( isset( $explode_src[1] ) && is_numeric( $explode_src[1] ) ){
|
||
$image = $explode_src[1];
|
||
}
|
||
|
||
}
|
||
|
||
if ( ! is_numeric( $image ) ) {
|
||
$image = mfn_get_attachment_id_url( $image );
|
||
}
|
||
|
||
// WPML workaround
|
||
|
||
$image = apply_filters( 'wpml_object_id', $image, 'attachment', true );
|
||
|
||
// ALT
|
||
|
||
if ( 'alt' == $data ) {
|
||
$return = get_post_meta( $image, '_wp_attachment_image_alt', true );
|
||
|
||
if ( ! $return ) {
|
||
$return = get_the_title( $image );
|
||
}
|
||
}
|
||
|
||
// WIDTH or HEIGHT
|
||
|
||
if ( ! $return ) {
|
||
$meta = get_post_meta( $image, '_wp_attachment_metadata', true );
|
||
|
||
if ( ! empty( $meta[$data] ) && $meta[$data] !== 1 ) {
|
||
$return = $meta[$data];
|
||
}
|
||
}
|
||
|
||
if ( $return && $with_key ) {
|
||
$return = esc_attr( $data ) .'="'. esc_attr( $return ) .'"';
|
||
}
|
||
|
||
return $return;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Srcset for Image
|
||
*/
|
||
|
||
if (! function_exists('mfn_srcset')) {
|
||
function mfn_srcset( $attachment_id, $html_tag = true ){
|
||
|
||
if( ! $attachment_id || mfn_opts_get('srcset-featured-image') === '0'){
|
||
return false;
|
||
}
|
||
|
||
$image_srcset = '';
|
||
|
||
if ( $html_tag ){
|
||
$image_srcset .= 'srcset="';
|
||
}
|
||
|
||
$image_srcset .= wp_get_attachment_image_srcset($attachment_id, array(400, 200));
|
||
|
||
if ( $html_tag ){
|
||
$image_srcset .= '"';
|
||
}
|
||
|
||
return $image_srcset;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Post Thumbnail | GET post thumbnail type
|
||
*/
|
||
|
||
if (! function_exists('mfn_post_thumbnail_type')) {
|
||
function mfn_post_thumbnail_type($postID)
|
||
{
|
||
$type = 'image';
|
||
$post_format = mfn_post_format($postID);
|
||
|
||
if ($post_format == 'image') {
|
||
$type = 'image';
|
||
} elseif ($post_format == 'video' && get_post_meta($postID, 'mfn-post-video', true)) {
|
||
$type = 'video embed';
|
||
} elseif ($post_format == 'video' && get_post_meta($postID, 'mfn-post-video-mp4', true)) {
|
||
$type = 'video html5';
|
||
} elseif (get_post_meta($postID, 'mfn-post-slider', true) || get_post_meta($postID, 'mfn-post-slider-layer', true)) {
|
||
$type = 'slider';
|
||
}
|
||
|
||
return $type;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Post Thumbnail | GET post thumbnail
|
||
*/
|
||
|
||
if (! function_exists('mfn_post_thumbnail')) {
|
||
function mfn_post_thumbnail($postID, $type = false, $style = false, $featured_image = false)
|
||
{
|
||
$output = '';
|
||
$sizeH = 'full';
|
||
$sizeV = 'full';
|
||
$is_srcset_enabled = mfn_opts_get('srcset-featured-image');
|
||
$tooltip = [
|
||
'class' => false,
|
||
'zoom' => false,
|
||
'website' => false,
|
||
'details' => false,
|
||
];
|
||
|
||
// tooltips
|
||
|
||
if( mfn_opts_get('image-frame-style') == 'modern-overlay' ){
|
||
$data_tooltip_position = 'left';
|
||
$tooltip = [
|
||
'class' => 'tooltip',
|
||
'zoom' => 'data-tooltip="'. esc_html__('Zoom','betheme') .'" data-position="'. $data_tooltip_position .'"',
|
||
'website' => 'data-tooltip="'. esc_html__('Go to website','betheme') .'" data-position="'. $data_tooltip_position .'"',
|
||
'details' => 'data-tooltip="'. esc_html__('Details','betheme') .'" data-position="'. $data_tooltip_position .'"',
|
||
];
|
||
}
|
||
|
||
// image size -----
|
||
|
||
if ($type == 'portfolio') {
|
||
|
||
// portfolio
|
||
|
||
if ($style == 'list') {
|
||
|
||
// portfolio: list
|
||
|
||
$sizeH = 'portfolio-list';
|
||
|
||
} elseif ($style == 'masonry-flat') {
|
||
|
||
// portfolio: masonry flat
|
||
|
||
$size = get_post_meta($postID, 'mfn-post-size', true);
|
||
if ($size == 'wide') {
|
||
$sizeH = 'portfolio-mf-w';
|
||
} elseif ($size == 'tall') {
|
||
$sizeH = 'portfolio-mf-t';
|
||
} else {
|
||
$sizeH = 'portfolio-mf';
|
||
}
|
||
|
||
} elseif ($style == 'masonry-minimal') {
|
||
|
||
// portfolio: masonry minimal
|
||
|
||
$sizeH = 'full';
|
||
|
||
} else {
|
||
|
||
// portfolio: default
|
||
|
||
$sizeH = 'blog-portfolio';
|
||
|
||
}
|
||
|
||
} elseif( 'blog' == $type && in_array($style, array('photo', 'photo2')) ){
|
||
|
||
// blog: photo
|
||
|
||
$sizeH = 'blog-single';
|
||
$sizeV = 'blog-single';
|
||
|
||
} elseif( in_array( $type, ['blog','related'] ) ){
|
||
|
||
// related posts
|
||
|
||
$sizeH = 'blog-portfolio';
|
||
|
||
} elseif ( is_single( $postID ) ) {
|
||
|
||
// blog & portfolio: single
|
||
|
||
$sizeH = 'blog-single';
|
||
|
||
} else {
|
||
|
||
// default
|
||
|
||
$sizeH = 'blog-portfolio';
|
||
|
||
}
|
||
|
||
// link wrap -----
|
||
|
||
$large_image_url = wp_get_attachment_image_src(get_post_thumbnail_id($postID), 'large');
|
||
|
||
if( ! $large_image_url ){
|
||
$large_image_url = [
|
||
0 => false,
|
||
];
|
||
}
|
||
|
||
if ( is_single($postID) && 'blog' !== $type ) {
|
||
|
||
// single
|
||
|
||
$link_before = '<a href="'. esc_url($large_image_url[0]) .'" rel="prettyphoto">';
|
||
$link_before .= '<div class="mask"></div>';
|
||
|
||
$link_after = '</a>';
|
||
$link_after .= '<div class="image_links">';
|
||
$link_after .= '<a class="zoom '. esc_attr($tooltip['class']) .'" '. $tooltip['zoom'] .' rel="prettyphoto" href="'. esc_url($large_image_url[0]) .'"><svg viewBox="0 0 26 26"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}</style></defs><circle cx="11.35" cy="11.35" r="6" class="path"></circle><line x1="15.59" y1="15.59" x2="20.65" y2="20.65" class="path"></line></svg></a>';
|
||
$link_after .= '</div>';
|
||
|
||
// single: post
|
||
|
||
if (get_post_type() == 'post') {
|
||
|
||
// blog: single - disable image zoom
|
||
|
||
if (! mfn_opts_get('blog-single-zoom')) {
|
||
$link_before = '';
|
||
$link_after = '';
|
||
}
|
||
|
||
// blog single: structured data
|
||
|
||
if ( mfn_opts_get('mfn-seo-schema-type') ) {
|
||
|
||
$link_after_schema = '';
|
||
|
||
$link_before .= '<div itemprop="image" itemscope itemtype="https://schema.org/ImageObject">';
|
||
|
||
$image_url = wp_get_attachment_image_src(get_post_thumbnail_id($postID), 'full');
|
||
|
||
if( ! empty( $image_url[0] ) ){
|
||
$link_after_schema .= '<meta itemprop="url" content="'. esc_url($image_url[0]) .'"/>';
|
||
$link_after_schema .= '<meta itemprop="width" content="'. esc_attr(mfn_get_attachment_data($image_url[0], 'width')) .'"/>';
|
||
$link_after_schema .= '<meta itemprop="height" content="'. esc_attr(mfn_get_attachment_data($image_url[0], 'height')) .'"/>';
|
||
}
|
||
|
||
$link_after_schema .= '</div>';
|
||
|
||
$link_after = $link_after_schema . $link_after;
|
||
}
|
||
}
|
||
|
||
} elseif ($type == 'portfolio') {
|
||
|
||
// portfolio
|
||
|
||
if( in_array( $style, array('flat', 'masonry-flat') ) ) {
|
||
$is_srcset_enabled = false;
|
||
}
|
||
|
||
$external = $featured_image ? $featured_image : mfn_opts_get('portfolio-external'); // next param, old var name
|
||
|
||
// external link to project page
|
||
|
||
$image_links = get_post_meta(get_the_ID(), 'mfn-post-link', true);
|
||
|
||
// image link
|
||
|
||
if ($external == 'popup') {
|
||
|
||
// popup
|
||
|
||
$link_before = '<a href="'. esc_url($large_image_url[0]) .'" rel="prettyphoto">';
|
||
$link_title = '<a href="'. esc_url($large_image_url[0]) .'" rel="prettyphoto">';
|
||
|
||
} elseif ( $external == 'disable' ) {
|
||
|
||
// disable details
|
||
|
||
$link_before = '<a href="'. esc_url($large_image_url[0]) .'" rel="prettyphoto[portfolio]">';
|
||
$link_title = '<a href="'. esc_url($large_image_url[0]) .'" rel="prettyphoto">';
|
||
|
||
} elseif ($external && $image_links) {
|
||
|
||
// link to project website
|
||
|
||
$link_before = '<a href="'. esc_url($image_links) .'" target="'. esc_attr($external) .'">';
|
||
$link_title = '<a href="'. esc_url($image_links) .'" target="'. esc_attr($external ).'">';
|
||
|
||
} else {
|
||
|
||
// link to project details
|
||
|
||
$link_before = '<a href="'. esc_url(get_permalink()) .'">';
|
||
$link_title = '<a href="'. esc_url(get_permalink()) .'">';
|
||
|
||
}
|
||
|
||
$link_before .= '<div class="mask"></div>';
|
||
|
||
$link_after = '</a>';
|
||
|
||
// hover
|
||
|
||
if (mfn_opts_get('portfolio-hover-title')) {
|
||
|
||
// hover: title
|
||
|
||
$link_after .= '<div class="image_links hover-title">';
|
||
$link_after .= $link_title . wp_kses(get_the_title(), mfn_allowed_html()) .'</a>';
|
||
$link_after .= '</div>';
|
||
|
||
} elseif ($external != 'disable') {
|
||
|
||
// hover: icons
|
||
|
||
$link_after .= '<div class="image_links">';
|
||
if (! in_array($external, array( '_self', '_blank' ))) {
|
||
$link_after .= '<a class="zoom '. esc_attr($tooltip['class']) .'" '. $tooltip['zoom'] .' rel="prettyphoto" href="'. esc_url($large_image_url[0]) .'"><svg viewBox="0 0 26 26"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}</style></defs><circle cx="11.35" cy="11.35" r="6" class="path"></circle><line x1="15.59" y1="15.59" x2="20.65" y2="20.65" class="path"></line></svg></a>';
|
||
}
|
||
if ($image_links) {
|
||
$link_after .= '<a class="external '. esc_attr($tooltip['class']) .'" '. $tooltip['website'] .' target="_blank" href="'. esc_url($image_links) .'"><svg viewBox="0 0 26 26"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}</style></defs><g><polyline points="18 14 18 20 6 20 6 8 12 8" class="path"/><line x1="10.34" y1="15.66" x2="19.71" y2="6.29" class="path"/><polyline points="20 12 20 6 14 6" class="path"/></g></svg></a>';
|
||
}
|
||
$link_after .= '<a class="link '. esc_attr($tooltip['class']) .'" '. $tooltip['details'] .' href="'. esc_url(get_permalink()) .'"><svg viewBox="0 0 26 26"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}</style></defs><g><path d="M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12" class="path"></path><path d="M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12" class="path"></path><line x1="10.17" y1="15.83" x2="15.83" y2="10.17" class="path"></line></g></svg></a>';
|
||
$link_after .= '</div>';
|
||
}
|
||
|
||
} else {
|
||
|
||
// blog
|
||
|
||
$link_before = '<a href="'. esc_url(get_permalink()) .'">';
|
||
$link_before .= '<div class="mask"></div>';
|
||
|
||
$link_after = '</a>';
|
||
$link_after .= '<div class="image_links double">';
|
||
$link_after .= '<a class="zoom '. esc_attr($tooltip['class']) .'" '. $tooltip['zoom'] .' rel="prettyphoto" href="'. esc_url($large_image_url[0]) .'"><svg viewBox="0 0 26 26"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}</style></defs><circle cx="11.35" cy="11.35" r="6" class="path"></circle><line x1="15.59" y1="15.59" x2="20.65" y2="20.65" class="path"></line></svg></a>';
|
||
$link_after .= '<a class="link '. esc_attr($tooltip['class']) .'" '. $tooltip['details'] .' href="'. esc_url(get_permalink()) .'"><svg viewBox="0 0 26 26"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}</style></defs><g><path d="M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12" class="path"></path><path d="M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12" class="path"></path><line x1="10.17" y1="15.83" x2="15.83" y2="10.17" class="path"></line></g></svg></a>';
|
||
$link_after .= '</div>';
|
||
}
|
||
|
||
// post format -----
|
||
|
||
$post_format = mfn_post_format($postID);
|
||
|
||
// featured image: available types
|
||
|
||
// no slider if load more
|
||
|
||
if ( 'no_slider' == $featured_image ) {
|
||
$type = 'portfolio';
|
||
}
|
||
|
||
// images only option
|
||
|
||
if ( 'image' == $featured_image ) {
|
||
if (! in_array($post_format, array( 'quote', 'link', 'image' ))) {
|
||
$post_format = 'image-only';
|
||
}
|
||
}
|
||
|
||
// image attributes and srcset
|
||
|
||
$image_attrs = [
|
||
'class'=>'scale-with-grid',
|
||
];
|
||
|
||
if( $is_srcset_enabled ){
|
||
$image_attrs['srcset'] = mfn_srcset( get_post_thumbnail_id($postID), false );
|
||
}
|
||
|
||
// switch
|
||
|
||
switch ($post_format) {
|
||
|
||
case 'quote':
|
||
case 'link':
|
||
|
||
// quote - Quote - without image
|
||
|
||
return false;
|
||
break;
|
||
|
||
case 'image':
|
||
|
||
// image - Vertical Image
|
||
|
||
if (has_post_thumbnail()) {
|
||
$output .= $link_before;
|
||
$output .= get_the_post_thumbnail($postID, $sizeV, $image_attrs);
|
||
$output .= $link_after;
|
||
}
|
||
break;
|
||
|
||
case 'video':
|
||
|
||
// video - Video
|
||
|
||
if ($video = get_post_meta($postID, 'mfn-post-video', true)) {
|
||
if (is_numeric($video)) {
|
||
// Vimeo
|
||
$output .= '<iframe class="scale-with-grid" src="https://player.vimeo.com/video/'. esc_attr($video) .'" allowFullScreen></iframe>'."\n";
|
||
} else {
|
||
// YouTube
|
||
$output .= '<iframe class="scale-with-grid" src="https://www.youtube.com/embed/'. esc_attr($video) .'?wmode=opaque&rel=0" allowfullscreen></iframe>'."\n";
|
||
}
|
||
} elseif (get_post_meta($postID, 'mfn-post-video-mp4', true)) {
|
||
$output .= mfn_jplayer($postID);
|
||
}
|
||
break;
|
||
|
||
case 'image-only':
|
||
|
||
// images only option
|
||
|
||
if (has_post_thumbnail()) {
|
||
$output .= $link_before;
|
||
$output .= get_the_post_thumbnail($postID, $sizeH, $image_attrs);
|
||
$output .= $link_after;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
|
||
// standard - Text, Horizontal Image, Slider
|
||
|
||
$rev_slider = get_post_meta($postID, 'mfn-post-slider', true);
|
||
$lay_slider = get_post_meta($postID, 'mfn-post-slider-layer', true);
|
||
|
||
if (('portfolio' != $type) && ($rev_slider || $lay_slider)) {
|
||
|
||
if ($rev_slider) {
|
||
// Revolution Slider
|
||
$output .= do_shortcode('[rev_slider '. $rev_slider .']');
|
||
} elseif ($lay_slider) {
|
||
// Layer Slider
|
||
$output .= do_shortcode('[layerslider id="'. $lay_slider .'"]');
|
||
}
|
||
|
||
} elseif ( has_post_thumbnail() ) {
|
||
|
||
// Image
|
||
|
||
$output .= $link_before;
|
||
$output .= get_the_post_thumbnail($postID, $sizeH, $image_attrs);
|
||
$output .= $link_after;
|
||
|
||
}
|
||
}
|
||
|
||
return $output;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* FIX: WP sometimes returns 1 as image width & height
|
||
*/
|
||
|
||
function mfn_get_attachment_image_src( $image, $attachment_id, $size, $icon ){
|
||
|
||
// width
|
||
|
||
if( !empty($image[1]) && $image[1] === 1 ){
|
||
$image[1] = false;
|
||
}
|
||
|
||
// height
|
||
|
||
if( !empty($image[2]) && $image[2] === 1 ){
|
||
$image[2] = false;
|
||
}
|
||
|
||
return $image;
|
||
|
||
}
|
||
add_filter( 'wp_get_attachment_image_src', 'mfn_get_attachment_image_src', 10, 4 );
|
||
|
||
/**
|
||
* Single Post Navigation | SET query order
|
||
*/
|
||
|
||
// previous
|
||
|
||
if (! function_exists('mfn_filter_previous_post_sort')) {
|
||
function mfn_filter_previous_post_sort($sort)
|
||
{
|
||
if (mfn_get_portfolio_order() == 'ASC') {
|
||
$order = 'DESC';
|
||
} else {
|
||
$order = 'ASC';
|
||
}
|
||
$sort = "ORDER BY p.". esc_sql(mfn_get_portfolio_orderby()) ." ". $order ." LIMIT 1";
|
||
return $sort;
|
||
}
|
||
}
|
||
|
||
if (! function_exists('mfn_filter_previous_post_where')) {
|
||
function mfn_filter_previous_post_where($where)
|
||
{
|
||
global $post, $wpdb;
|
||
|
||
$orderby = mfn_get_portfolio_orderby();
|
||
$where = preg_replace("/(.*)p.post_type/", "AND p.post_type", $where);
|
||
|
||
if (mfn_get_portfolio_order() == 'ASC') {
|
||
$where_pre = $wpdb->prepare("WHERE p.". esc_sql($orderby) ." < %s", $post->$orderby);
|
||
} else {
|
||
$where_pre = $wpdb->prepare("WHERE p.". esc_sql($orderby) ." > %s", $post->$orderby);
|
||
}
|
||
|
||
$where = $where_pre.' '.$where;
|
||
return $where;
|
||
}
|
||
}
|
||
|
||
// next
|
||
|
||
if (! function_exists('mfn_filter_next_post_sort')) {
|
||
function mfn_filter_next_post_sort($sort)
|
||
{
|
||
$sort = "ORDER BY p.". esc_sql(mfn_get_portfolio_orderby()) ." ". esc_sql(mfn_get_portfolio_order()) ." LIMIT 1";
|
||
return $sort;
|
||
}
|
||
}
|
||
|
||
if (! function_exists('mfn_filter_next_post_where')) {
|
||
function mfn_filter_next_post_where($where)
|
||
{
|
||
global $post, $wpdb;
|
||
|
||
$orderby = mfn_get_portfolio_orderby();
|
||
$where = preg_replace("/(.*)p.post_type/", "AND p.post_type", $where);
|
||
|
||
if (mfn_get_portfolio_order() == 'ASC') {
|
||
$where_pre = $wpdb->prepare("WHERE p.". esc_sql($orderby) ." > %s", $post->$orderby);
|
||
} else {
|
||
$where_pre = $wpdb->prepare("WHERE p.". esc_sql($orderby) ." < %s", $post->$orderby);
|
||
}
|
||
|
||
$where = $where_pre.' '.$where;
|
||
return $where;
|
||
}
|
||
}
|
||
|
||
// helpers
|
||
|
||
if (! function_exists('mfn_get_portfolio_order')) {
|
||
function mfn_get_portfolio_order()
|
||
{
|
||
return mfn_opts_get('portfolio-order', 'DESC');
|
||
}
|
||
}
|
||
|
||
if (! function_exists('mfn_get_portfolio_orderby')) {
|
||
function mfn_get_portfolio_orderby()
|
||
{
|
||
$orderby = mfn_opts_get('portfolio-orderby', 'date');
|
||
switch ($orderby) {
|
||
case 'title':
|
||
$orderby = 'post_title';
|
||
break;
|
||
case 'menu_order':
|
||
$orderby = 'menu_order';
|
||
break;
|
||
default:
|
||
$orderby = 'post_date';
|
||
}
|
||
return $orderby;
|
||
}
|
||
}
|
||
|
||
// filters
|
||
|
||
if (! function_exists('mfn_post_navigation_sort')) {
|
||
function mfn_post_navigation_sort()
|
||
{
|
||
add_filter('get_previous_post_sort', 'mfn_filter_previous_post_sort');
|
||
add_filter('get_previous_post_where', 'mfn_filter_previous_post_where');
|
||
add_filter('get_next_post_sort', 'mfn_filter_next_post_sort');
|
||
add_filter('get_next_post_where', 'mfn_filter_next_post_where');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Single Post Navigation | GET header navigation
|
||
*/
|
||
|
||
if (! function_exists('mfn_post_navigation_header')) {
|
||
function mfn_post_navigation_header($post_prev, $post_next, $post_home, $translate = array())
|
||
{
|
||
$style = mfn_opts_get('prev-next-style');
|
||
|
||
$output = '<div class="column one post-nav '. esc_attr($style) .'">';
|
||
|
||
if ($style == 'minimal') {
|
||
|
||
// minimal
|
||
|
||
if ($post_prev) {
|
||
$output .= '<a class="prev" href="'. esc_url(get_permalink($post_prev)) .'"><i class="icon icon-left-open-big" aria-label="previous post"></i></a>';
|
||
}
|
||
if ($post_next) {
|
||
$output .= '<a class="next" href="'. esc_url(get_permalink($post_next)) .'"><i class="icon icon-right-open-big" aria-label="next post"></i></a>';
|
||
}
|
||
if ($post_home) {
|
||
$output .= '<a class="home" href="'. esc_url(get_permalink($post_home)) .'"><svg class="icon" aria-label="all posts" width="22" height="22" xmlns="https://www.w3.org/2000/svg"><path d="M7,2v5H2V2H7 M9,0H0v9h9V0L9,0z"/><path d="M20,2v5h-5V2H20 M22,0h-9v9h9V0L22,0z"/><path d="M7,15v5H2v-5H7 M9,13H0v9h9V13L9,13z"/><path d="M20,15v5h-5v-5H20 M22,13h-9v9h9V13L22,13z"/></svg></a>';
|
||
}
|
||
|
||
} else {
|
||
|
||
// default
|
||
|
||
$output .= '<ul class="next-prev-nav">';
|
||
if ($post_prev) {
|
||
$output .= '<li class="prev"><a class="button default the-icon" href="'. esc_url(get_permalink($post_prev)) .'"><span class="button_icon"><i class="icon-left-open" aria-label="previous post"></i></span></a></li>';
|
||
}
|
||
if ($post_next) {
|
||
$output .= '<li class="next"><a class="button default the-icon" href="'. esc_url(get_permalink($post_next)) .'"><span class="button_icon"><i class="icon-right-open" aria-label="next post"></i></span></a></li>';
|
||
}
|
||
$output .= '</ul>';
|
||
|
||
if ($post_home) {
|
||
$output .= '<a class="list-nav" href="'. esc_url(get_permalink($post_home)) .'"><i class="icon-layout" aria-hidden="true"></i>'. esc_html($translate['all']) .'</a>';
|
||
}
|
||
}
|
||
|
||
$output .= '</div>';
|
||
|
||
return $output;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Single Post Navigation | GET sticky navigation
|
||
*/
|
||
|
||
if (! function_exists('mfn_post_navigation_sticky')) {
|
||
function mfn_post_navigation_sticky($post, $next_prev, $icon)
|
||
{
|
||
$has_date = mfn_opts_get('prev-next-date','1');
|
||
|
||
$output = '';
|
||
|
||
if (is_object($post)) {
|
||
|
||
// move this DOM element with JS
|
||
|
||
$style = mfn_opts_get('prev-next-sticky-style', 'default');
|
||
|
||
$output .= '<a class="fixed-nav fixed-nav-'. esc_attr($next_prev) .' format-'. esc_attr(get_post_format($post)) .' style-'. esc_attr($style) .'" href="'. esc_url(get_permalink($post)) .'">';
|
||
|
||
$output .= '<span class="arrow"><i class="'. esc_attr($icon) .'" aria-hidden="true"></i></span>';
|
||
|
||
$output .= '<div class="photo">';
|
||
$output .= get_the_post_thumbnail($post->ID, 'be_thumbnail');
|
||
$output .= '</div>';
|
||
|
||
$output .= '<div class="desc">';
|
||
$output .= '<h6>'. wp_kses(get_the_title($post), array()) .'</h6>';
|
||
if( $has_date ){
|
||
$output .= '<span class="date"><i class="icon-clock" aria-hidden="true"></i>'. esc_html(get_the_date(get_option('date_format'), $post->ID)) .'</span>';
|
||
}
|
||
$output .= '</div>';
|
||
|
||
$output .= '</a>';
|
||
}
|
||
|
||
return $output;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Search | SET add custom fields to search query
|
||
*/
|
||
|
||
if (! function_exists('mfn_search')) {
|
||
function mfn_search( $search_query )
|
||
{
|
||
global $wpdb;
|
||
|
||
if ( is_admin() ) {
|
||
return false;
|
||
}
|
||
|
||
if ( is_search() && $search_query->is_main_query() && $search_query->is_search() ) {
|
||
|
||
$keyword = trim(get_search_query() ?? '');
|
||
$is_search_shop_only = mfn_opts_get('header-search') === 'shop' ? true : false;
|
||
|
||
if ( ! $keyword ) {
|
||
return false;
|
||
}
|
||
|
||
// WooCommerce uses default search Query
|
||
|
||
if (function_exists('is_woocommerce') && is_woocommerce()) {
|
||
return false;
|
||
}
|
||
|
||
$keyword = '%'. $wpdb->esc_like($keyword) .'%';
|
||
|
||
// post title
|
||
|
||
$post_ids_title = $wpdb->get_col($wpdb->prepare("
|
||
SELECT DISTINCT `ID` FROM {$wpdb->posts}
|
||
WHERE `post_title` LIKE %s
|
||
", $keyword));
|
||
|
||
// post conatnt
|
||
|
||
$post_ids_content = $wpdb->get_col($wpdb->prepare("
|
||
SELECT DISTINCT `ID` FROM {$wpdb->posts}
|
||
WHERE `post_content` LIKE %s
|
||
", $keyword));
|
||
|
||
// custom fields
|
||
|
||
$post_ids_meta = $wpdb->get_col($wpdb->prepare("
|
||
SELECT DISTINCT `post_id` FROM {$wpdb->postmeta}
|
||
WHERE `meta_key` = 'mfn-page-items-seo'
|
||
AND `meta_value` LIKE %s
|
||
", $keyword));
|
||
|
||
$post_ids = array_merge($post_ids_title, $post_ids_content, $post_ids_meta);
|
||
|
||
// live search -- category load
|
||
|
||
if ( isset($_GET['mfn_livesearch']) ) {
|
||
|
||
/* CONFIG */
|
||
|
||
//We need the string(categories), and word array (for posts and page search)
|
||
$words_string = preg_replace('/\s/', ',', $keyword);
|
||
$words_array = explode(',', preg_replace('/\%/', '', $words_string) );
|
||
|
||
$posts_array = [];
|
||
/* Default queue: Posts/Pages -> Categories -> WooCategories */
|
||
|
||
/* END OF CONFIG */
|
||
|
||
if( !$is_search_shop_only ){
|
||
|
||
/* POSTS AND PAGE NAME QUERY */
|
||
|
||
foreach ($words_array as $words_key => $words_value){ //RELATION: OR
|
||
$args_title = array( 's' => $words_value, 'posts_per_page' => -1 );
|
||
$query_title = new WP_Query($args_title);
|
||
|
||
if($query_title->have_posts()){
|
||
$posts_array = $query_title->get_posts();
|
||
foreach($posts_array as $post_item_key => $post_item_val){
|
||
$post_ids[] = strval($post_item_val->ID);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
/* END OF POSTS AND PAGE NAME QUERY */
|
||
|
||
/* POSTS AND PAGE CATEGORIES QUERY */
|
||
|
||
foreach($words_array as $words_key => $words_value){
|
||
$args_category = array( 'category_name' => $words_value, 'posts_per_page' => -1, 'fields' => 'ids'); // replace space => comma
|
||
$query_category = new WP_Query($args_category);
|
||
|
||
if($query_category->have_posts()){
|
||
$posts_array = $query_category->get_posts();
|
||
|
||
foreach($posts_array as $cat_item_key => $cat_item_val){
|
||
$post_ids[] = strval($cat_item_val);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* END OF POSTS AND PAGE CATEGORIES QUERY */
|
||
|
||
}
|
||
|
||
/* WOOCOMMERCE CATEGORIES QUERY */
|
||
|
||
foreach($words_array as $words_key => $words_value){
|
||
$args_category = array( 'product_cat' => $words_value, 'posts_per_page' => -1, 'fields' => 'ids', 'post_type' => 'product'); // replace space => comma
|
||
$query_category = new WP_Query($args_category);
|
||
|
||
if($query_category->have_posts()){
|
||
$posts_array = $query_category->get_posts();
|
||
|
||
foreach($posts_array as $cat_item_key => $cat_item_val){
|
||
$post_ids[] = strval($cat_item_val);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* END OF WOOCOMMERCE CATEGORIES QUERY */
|
||
|
||
if( $is_search_shop_only ){
|
||
$search_query->set('post_type', 'product');
|
||
//limit the search to products, prevent searching for posts/pages
|
||
}
|
||
|
||
if ( ! isset($_GET['searchpage']) ) {
|
||
$search_amount_posts = esc_attr(mfn_opts_get('header-search-live-load-posts', 10));
|
||
$search_query->set('posts_per_page', $search_amount_posts);
|
||
//if value above will be < 10, then button of show more in livesearch will not appear!
|
||
}
|
||
|
||
}
|
||
|
||
if ( ! count($post_ids) ) {
|
||
return false;
|
||
}
|
||
|
||
$search_query->set('s', false);
|
||
$search_query->set('post__in', $post_ids);
|
||
$search_query->set('orderby', 'post__in');
|
||
}
|
||
}
|
||
}
|
||
add_action('pre_get_posts', 'mfn_search');
|
||
|
||
/**
|
||
* All categories available
|
||
*/
|
||
|
||
if (! function_exists('mfn_list_categories')) {
|
||
function mfn_list_categories()
|
||
{
|
||
$is_search_shop_only = mfn_opts_get('header-search') === 'shop' ? true : false;
|
||
|
||
$portfolio_terms = get_terms( array( 'taxonomy' => 'portfolio-types', 'hide_empty' => false ) );
|
||
$blog_terms = get_terms( 'category', array( 'hide_empty' => false ) );
|
||
$shop_terms = get_terms( 'product_cat', array( 'hide_empty' => false ) );
|
||
|
||
$all_terms = [];
|
||
|
||
if( ! $is_search_shop_only ){
|
||
|
||
if ( $portfolio_terms && empty($portfolio_terms->errors) ) {
|
||
$all_terms[] = $portfolio_terms;
|
||
}
|
||
|
||
if ( $blog_terms && empty($blog_terms->errors) ) {
|
||
$all_terms[] = $blog_terms;
|
||
}
|
||
|
||
}
|
||
|
||
if ( $shop_terms && empty($shop_terms->errors) ) {
|
||
$all_terms[] = $shop_terms;
|
||
}
|
||
|
||
$all_terms = array_merge( [], ...$all_terms );
|
||
$all_terms = json_decode( json_encode($all_terms), true );
|
||
|
||
$categories_found = array();
|
||
foreach($all_terms as $key => $value){
|
||
$categories_found[get_category_link($value['term_id'])] = $value['name'];
|
||
}
|
||
|
||
$categories_found = array_unique($categories_found);
|
||
|
||
return $categories_found;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Posts per page & pagination fix
|
||
*/
|
||
|
||
if (! function_exists('mfn_option_posts_per_page')) {
|
||
function mfn_option_posts_per_page($value)
|
||
{
|
||
if (is_tax('portfolio-types')) {
|
||
$posts_per_page = mfn_opts_get('portfolio-posts', 6, ['not_empty' => true]);
|
||
} else {
|
||
$posts_per_page = mfn_opts_get('blog-posts', 5, ['not_empty' => true]);
|
||
}
|
||
return $posts_per_page;
|
||
}
|
||
}
|
||
|
||
if (! function_exists('mfn_posts_per_page')) {
|
||
function mfn_posts_per_page()
|
||
{
|
||
add_filter('option_posts_per_page', 'mfn_option_posts_per_page');
|
||
}
|
||
}
|
||
add_action('init', 'mfn_posts_per_page', 0);
|
||
|
||
/**
|
||
* Comments number with text
|
||
*/
|
||
|
||
if (! function_exists('mfn_comments_number')) {
|
||
function mfn_comments_number()
|
||
{
|
||
$translate['comment'] = mfn_opts_get('translate') ? mfn_opts_get('translate-comment', 'comment') : __('comment', 'betheme');
|
||
$translate['comments'] = mfn_opts_get('translate') ? mfn_opts_get('translate-comments', 'comments') : __('comments', 'betheme');
|
||
$translate['comments-off'] = mfn_opts_get('translate') ? mfn_opts_get('translate-comments-off', 'comments off') : __('comments off', 'betheme');
|
||
|
||
$num_comments = get_comments_number(); // get_comments_number returns only a numeric value
|
||
|
||
if (comments_open()) {
|
||
if ($num_comments != 1) {
|
||
$comments = '<a href="'. esc_url(get_comments_link()) .'">'. esc_html($num_comments).'</a> '. esc_html($translate['comments']);
|
||
} else {
|
||
$comments = '<a href="'. esc_url(get_comments_link()) .'">1</a> '. esc_html($translate['comment']);
|
||
}
|
||
} else {
|
||
$comments = $translate['comments-off'];
|
||
}
|
||
return $comments;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Menu title in selected location
|
||
*/
|
||
|
||
if (! function_exists('mfn_get_menu_name')) {
|
||
function mfn_get_menu_name($location)
|
||
{
|
||
if (! has_nav_menu($location)) {
|
||
return false;
|
||
}
|
||
|
||
$menus = get_nav_menu_locations();
|
||
$menu_title = wp_get_nav_menu_object($menus[$location])->name;
|
||
|
||
return $menu_title;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* GET | WordPress Authors
|
||
*/
|
||
|
||
if (! function_exists('mfn_get_authors')) {
|
||
function mfn_get_authors()
|
||
{
|
||
$authors = get_users( array( 'role__in' => array( 'contributor', 'author', 'editor', 'administrator' ) ) );
|
||
|
||
if (is_array($authors)) {
|
||
foreach ($authors as $ka => $author) {
|
||
|
||
// remove authors without posts
|
||
|
||
$posts_count = count_user_posts( $author->ID, 'post', true );
|
||
|
||
if( $posts_count < 1 ){
|
||
unset($authors[$ka]);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
return $authors;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* GET Categories
|
||
* Categories for posts or specified taxonomy
|
||
*/
|
||
|
||
if (! function_exists('mfn_get_categories')) {
|
||
function mfn_get_categories($category)
|
||
{
|
||
$categories = get_categories(array(
|
||
'taxonomy' => $category,
|
||
'hide_empty' => false,
|
||
));
|
||
|
||
$array = array(
|
||
'' => esc_html__('All', 'mfn-opts'),
|
||
);
|
||
|
||
foreach ($categories as $cat) {
|
||
if (is_object($cat)) {
|
||
$array[$cat->slug] = $cat->name;
|
||
}
|
||
}
|
||
|
||
return $array;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* GET Hierarchical Taxonomy
|
||
* Categories for posts or specified taxonomy with hierarchy
|
||
*/
|
||
|
||
if (! function_exists('mfn_hierarchical_taxonomy')) {
|
||
function mfn_hierarchical_taxonomy($type){
|
||
|
||
// 1st level
|
||
$taxonomy = get_terms( array(
|
||
'taxonomy' => $type,
|
||
'hide_empty' => false,
|
||
'parent' => 0
|
||
) );
|
||
|
||
$array = array();
|
||
|
||
if( !empty($taxonomy) && is_array($taxonomy) && count($taxonomy) > 0 ){
|
||
foreach ($taxonomy as $t=>$taxo) {
|
||
if (is_object($taxo) && !empty($taxo->name) ) {
|
||
$array[] = (object) array('id' => $taxo->term_id, 'slug' => $taxo->slug, 'name' => $taxo->name);
|
||
|
||
// 2nd level
|
||
$childrens = get_terms( array(
|
||
'taxonomy' => $type,
|
||
'hide_empty' => false,
|
||
'parent' => $taxo->term_id
|
||
) );
|
||
|
||
if( count($childrens) > 0 ){
|
||
foreach ($childrens as $ch) {
|
||
if(is_object($ch) ) {
|
||
$array[] = (object) array('id' => $ch->term_id, 'slug' => $ch->slug, 'name' => ' '.$ch->name);
|
||
|
||
// 3rd level
|
||
$childs = get_terms( array(
|
||
'taxonomy' => $type,
|
||
'hide_empty' => false,
|
||
'parent' => $ch->term_id
|
||
) );
|
||
|
||
if( count($childs) > 0 ){
|
||
foreach ($childs as $chi) {
|
||
if(is_object($chi) ) {
|
||
$array[] = (object) array('id' => $chi->term_id, 'slug' => $chi->slug, 'name' => ' '.$chi->name);
|
||
|
||
// 4th level
|
||
$childs4 = get_terms( array(
|
||
'taxonomy' => $type,
|
||
'hide_empty' => false,
|
||
'parent' => $chi->term_id
|
||
) );
|
||
|
||
if( count($childs4) > 0 ){
|
||
foreach ($childs4 as $ch4) {
|
||
if(is_object($ch4) ) {
|
||
$array[] = (object) array('id' => $ch4->term_id, 'slug' => $ch4->slug, 'name' => ' '.$ch4->name);
|
||
|
||
// 5th level
|
||
$childs5 = get_terms( array(
|
||
'taxonomy' => $type,
|
||
'hide_empty' => false,
|
||
'parent' => $ch4->term_id
|
||
) );
|
||
|
||
if( count($childs5) > 0 ){
|
||
foreach ($childs5 as $ch5) {
|
||
if(is_object($ch5) ) {
|
||
$array[] = (object) array('id' => $ch5->term_id, 'slug' => $ch5->slug, 'name' => ' '.$ch5->name);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
return $array;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* GET Post Types
|
||
* post types and its categories
|
||
*/
|
||
|
||
if (! function_exists('mfn_get_posttypes')) {
|
||
function mfn_get_posttypes( $nested = false )
|
||
{
|
||
// $nested = posts || tax
|
||
|
||
$array = array( '' => esc_html__('All', 'mfn-opts') );
|
||
|
||
if( $nested && $nested == 'posts' ){
|
||
|
||
$array['page'] = array(
|
||
'label' => esc_html__('Pages', 'mfn-opts'),
|
||
'items' => get_posts( array( 'post_type' => 'page', 'numberposts' => -1 ) )
|
||
);
|
||
|
||
if( function_exists('is_woocommerce') ){
|
||
$array['product'] = array(
|
||
'label' => esc_html__('Shop', 'mfn-opts'),
|
||
'items' => get_posts( array( 'post_type' => 'product', 'numberposts' => -1 ) )
|
||
);
|
||
}
|
||
|
||
$array['post'] = array(
|
||
'label' => esc_html__('Posts', 'mfn-opts'),
|
||
'items' => get_posts( array( 'post_type' => 'post', 'numberposts' => -1 ) )
|
||
);
|
||
|
||
$array['portfolio'] = array(
|
||
'label' => esc_html__('Portfolio', 'mfn-opts'),
|
||
'items' => get_posts( array( 'post_type' => 'portfolio', 'numberposts' => -1 ) )
|
||
);
|
||
|
||
$array['offer'] = array(
|
||
'label' => esc_html__('Offer', 'mfn-opts'),
|
||
'items' => get_posts( array( 'post_type' => 'offer', 'numberposts' => -1 ) )
|
||
);
|
||
|
||
}else if( $nested && $nested == 'tax' ){
|
||
|
||
$array['page'] = array(
|
||
'label' => esc_html__('Pages', 'mfn-opts'),
|
||
'items' => false
|
||
);
|
||
|
||
if( function_exists('is_woocommerce') ){
|
||
$array['product'] = array(
|
||
'label' => esc_html__('Shop', 'mfn-opts'),
|
||
'items' => mfn_hierarchical_taxonomy('product_cat')
|
||
);
|
||
}
|
||
|
||
$array['post'] = array(
|
||
'label' => esc_html__('Posts', 'mfn-opts'),
|
||
'items' => mfn_hierarchical_taxonomy('category')
|
||
);
|
||
|
||
$array['portfolio'] = array(
|
||
'label' => esc_html__('Portfolio', 'mfn-opts'),
|
||
'items' => mfn_hierarchical_taxonomy('portfolio-types')
|
||
);
|
||
|
||
$array['offer'] = array(
|
||
'label' => esc_html__('Offer', 'mfn-opts'),
|
||
'items' => mfn_hierarchical_taxonomy('offer-types')
|
||
);
|
||
|
||
}else{
|
||
|
||
$array['page'] = esc_html__('Pages', 'mfn-opts');
|
||
if( function_exists('is_woocommerce') ){
|
||
$array['woocommerce'] = esc_html__('Shop', 'mfn-opts');
|
||
}
|
||
$array['post'] = esc_html__('Posts', 'mfn-opts');
|
||
$array['portfolio'] = esc_html__('Portfolio', 'mfn-opts');
|
||
$array['offer'] = esc_html__('Offer', 'mfn-opts');
|
||
|
||
}
|
||
|
||
return $array;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Under Construction
|
||
*/
|
||
|
||
if (! function_exists('mfn_under_construction')) {
|
||
function mfn_under_construction()
|
||
{
|
||
$php_self = $_SERVER['PHP_SELF']; // context is safe and necessary
|
||
|
||
if (mfn_opts_get('construction')) {
|
||
|
||
if (isset($_POST['_wpcf7'])) {
|
||
// contact form 7 compatibility
|
||
} else {
|
||
if (! is_user_logged_in() && ! is_admin()
|
||
&& basename($php_self) != 'wp-login.php'
|
||
&& basename($php_self) != 'wp-cron.php'
|
||
&& basename($php_self) != 'xmlrpc.php') {
|
||
get_template_part('under-construction');
|
||
exit();
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
add_action('init', 'mfn_under_construction', 30);
|
||
|
||
/**
|
||
* Repetitive Link | Accessibility PBL
|
||
*/
|
||
|
||
if (! function_exists('mfn_repetitive_link')) {
|
||
function mfn_repetitive_link( $link, $title, $repetitive_link = '' )
|
||
{
|
||
$ready_repetetive_text = false;
|
||
$response = '';
|
||
|
||
if( !empty( $repetitive_link ) ) {
|
||
|
||
$ready_repetetive_text = $repetitive_link;
|
||
|
||
} else {
|
||
|
||
$post_id = url_to_postid( esc_url($link) );
|
||
|
||
switch ( true ) {
|
||
case $link[0] === '#' && isset($link[1]): // Scroll to section, probably anchor.
|
||
$cleared_section_name = preg_replace('/#*/', '', $link);
|
||
$ready_repetetive_text = 'Scroll to '.$cleared_section_name.' section';
|
||
break;
|
||
case $post_id === 0 || ($link[0] === '#'): // No repetitve text, do nothing
|
||
break;
|
||
case $post_id > 0: // Get the Title
|
||
$ready_repetetive_text = get_the_title( $post_id );
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
if ( ! is_bool( $ready_repetetive_text ) ) {
|
||
$response = $title .'<span class="screen-reader-text"> - '. $ready_repetetive_text .'</span>';
|
||
} else {
|
||
$response = $title;
|
||
}
|
||
|
||
return $response;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Set Max Content Width
|
||
*/
|
||
|
||
if (! isset($content_width)) {
|
||
$content_width = 1220;
|
||
}
|
||
|
||
/**
|
||
* Unserializes data only if it was serialized
|
||
*/
|
||
|
||
function mfn_maybe_unserialize( $data ) {
|
||
if ( is_serialized( $data ) ) { // Don't attempt to unserialize data that wasn't serialized going in.
|
||
return @unserialize( trim( $data ), ['allowed_classes' => false] );
|
||
}
|
||
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* WPML | Date Format
|
||
*/
|
||
|
||
if (! function_exists('mfn_wpml_date_format')) {
|
||
function mfn_wpml_date_format($format)
|
||
{
|
||
if (function_exists('icl_translate')) {
|
||
$format = icl_translate('Formats', $format, $format);
|
||
}
|
||
return $format;
|
||
}
|
||
}
|
||
add_filter('option_date_format', 'mfn_wpml_date_format');
|
||
|
||
/*
|
||
* WPML | Workaround for compsupp-5901
|
||
*/
|
||
|
||
function mfn_wpml_encode_custom_field( $custom_field_val, $custom_field_name ) {
|
||
if ( $custom_field_name === 'mfn-page-items' ) {
|
||
$custom_field_val = mb_convert_encoding( $custom_field_val, 'UTF-8', 'auto' );
|
||
$custom_field_val = base64_encode( serialize( $custom_field_val ) );
|
||
}
|
||
return $custom_field_val;
|
||
}
|
||
add_filter( 'wpml_encode_custom_field', 'mfn_wpml_encode_custom_field', 10, 2 );
|
||
|
||
function mfn_wpml_decode_custom_field( $custom_field_val, $custom_field_name ) {
|
||
if ( $custom_field_name === 'mfn-page-items' && is_string( $custom_field_val ) ) {
|
||
$custom_field_val = mb_convert_encoding($custom_field_val, 'UTF-8', 'auto');
|
||
$custom_field_val = mfn_maybe_unserialize( base64_decode( $custom_field_val ) );
|
||
}
|
||
return $custom_field_val;
|
||
}
|
||
add_filter( 'wpml_decode_custom_field', 'mfn_wpml_decode_custom_field', 10, 2 );
|
||
|
||
/**
|
||
* WPML | ID
|
||
* @param type string – 'post', 'page', 'post_tag' or 'category'
|
||
*/
|
||
|
||
if (! function_exists('mfn_wpml_ID')) {
|
||
function mfn_wpml_ID($id, $type = 'page')
|
||
{
|
||
if (function_exists('icl_object_id')) {
|
||
return icl_object_id($id, $type, true);
|
||
} else {
|
||
return $id;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* WPML | Term slug
|
||
*/
|
||
|
||
if (! function_exists('mfn_wpml_term_slug')) {
|
||
function mfn_wpml_term_slug($slug, $type, $multi = false)
|
||
{
|
||
if (function_exists('icl_object_id')) {
|
||
if ($multi) {
|
||
|
||
// multiple categories
|
||
|
||
$slugs = explode(',', $slug);
|
||
|
||
if (is_array($slugs)) {
|
||
foreach ($slugs as $slug_k => $slug) {
|
||
$slug = trim($slug);
|
||
|
||
$term = get_term_by('slug', $slug, $type);
|
||
$term = apply_filters('wpml_object_id', $term->term_id, $type, true);
|
||
$slug = get_term_by('term_id', $term, $type)->slug;
|
||
|
||
$slugs[$slug_k] = $slug;
|
||
}
|
||
}
|
||
|
||
$slug = implode(',', $slugs);
|
||
} else {
|
||
|
||
// single category
|
||
|
||
$term = get_term_by('slug', $slug, $type);
|
||
|
||
if( !empty($term) ) {
|
||
$term = apply_filters('wpml_object_id', $term->term_id, $type, true);
|
||
$slug = get_term_by('term_id', $term, $type)->slug;
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
return $slug;
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Hubspot Impact leading code
|
||
*/
|
||
|
||
function mfn_get_hubspot_affiliate_code() {
|
||
return 'oegjYn';
|
||
}
|
||
|
||
add_filter( 'leadin_impact_code', 'mfn_get_hubspot_affiliate_code' );
|
||
|
||
function disable_redirect() {
|
||
remove_all_actions( 'leadin_redirect' );
|
||
}
|
||
|
||
add_action( 'leadin_activate', 'disable_redirect' );
|
||
|
||
/**
|
||
* Schema | Auto Get Schema Type By Post Type
|
||
*/
|
||
|
||
if (! function_exists('mfn_tag_schema')) {
|
||
function mfn_tag_schema()
|
||
{
|
||
$schema = 'https://schema.org/';
|
||
|
||
// Is Woocommerce product
|
||
if (function_exists('is_product') && is_product()) {
|
||
$type = false;
|
||
} elseif (is_single() && get_post_type() == 'post') {
|
||
|
||
// Single post
|
||
$type = "Article";
|
||
} elseif (is_author()) {
|
||
|
||
// Author page
|
||
$type = 'ProfilePage';
|
||
} elseif (is_search()) {
|
||
|
||
// Search results
|
||
$type = 'SearchResultsPage';
|
||
} else {
|
||
|
||
// Default
|
||
$type = 'WebPage';
|
||
}
|
||
|
||
if (mfn_opts_get('mfn-seo-schema-type') && $type) {
|
||
echo ' itemscope itemtype="'. esc_url($schema) . esc_attr($type) .'"';
|
||
}
|
||
|
||
return true;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Uploads Folder
|
||
*/
|
||
|
||
if (! function_exists('mfn_uploads_dir')) {
|
||
function mfn_uploads_dir( $dir = 'baseurl', $depth1 = '', $depth2 = '' ){
|
||
|
||
$upload_dir = wp_upload_dir();
|
||
$path_be = $upload_dir[$dir] .'/betheme';
|
||
|
||
if ( !empty($depth1) ) {
|
||
$path_be .= '/' . $depth1;
|
||
}
|
||
|
||
if ( !empty($depth2) ) {
|
||
$path_be .= '/' . $depth2;
|
||
}
|
||
|
||
return wp_normalize_path($path_be);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Bundled plugins
|
||
*/
|
||
|
||
if (! function_exists('mfn_bundled_plugins')) {
|
||
function mfn_bundled_plugins(){
|
||
|
||
if (! mfn_opts_get('plugin-rev')) {
|
||
if (function_exists('set_revslider_as_theme')) {
|
||
set_revslider_as_theme();
|
||
}
|
||
}
|
||
|
||
if (! mfn_opts_get('plugin-visual')) {
|
||
function mfn_vc_set_as_theme(){
|
||
vc_set_as_theme();
|
||
}
|
||
add_action('vc_before_init', 'mfn_vc_set_as_theme');
|
||
}
|
||
|
||
}
|
||
}
|
||
mfn_bundled_plugins();
|
||
|
||
/**
|
||
* Is BeBuilder Blocks
|
||
*/
|
||
|
||
function mfn_is_blocks( $vb = false, $post_id = false ){
|
||
|
||
global $post;
|
||
|
||
if( empty($post_id) ){
|
||
if( ! empty($post->ID) ){
|
||
$post_id = $post->ID;
|
||
}
|
||
}
|
||
|
||
if( !empty($post_id) && get_post_type($post_id) == 'template' && get_post_meta($post_id, 'mfn_template_type', true) && in_array( get_post_meta($post_id, 'mfn_template_type', true), array('header', 'footer', 'megamenu', 'popup') ) ){
|
||
return false;
|
||
}
|
||
|
||
if( $vb || wp_doing_ajax() || (!empty($_GET['visual']) && 'iframe' == $_GET['visual']) ){
|
||
|
||
// demo
|
||
if( ! empty($_GET['ui']) && 'blocks' === $_GET['ui'] ){
|
||
return true;
|
||
}
|
||
|
||
$user_id = get_current_user_id();
|
||
$options = get_site_option( 'betheme_builder_'. $user_id );
|
||
|
||
if( !empty($options['builder-blocks']) ){
|
||
return true;
|
||
}
|
||
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Is Elementor
|
||
*/
|
||
|
||
function mfn_is_elementor( $post_id ){
|
||
|
||
if ( ! did_action( 'elementor/loaded' ) ) {
|
||
return false;
|
||
}
|
||
|
||
if ( ! $post_id || wp_doing_ajax()) {
|
||
return false;
|
||
}
|
||
|
||
if( is_object( \Elementor\Plugin::$instance->documents->get( $post_id ) ) ){
|
||
return \Elementor\Plugin::$instance->documents->get( $post_id )->is_built_with_elementor();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Rank Math SEO | Compatibility of BeTheme Table of Contents
|
||
*/
|
||
|
||
add_filter( 'rank_math/researches/toc_plugins', function( $toc_plugins ) {
|
||
$toc_plugins['seo-by-rank-math/rank-math.php'] = 'Betheme Table Of Contents';
|
||
return $toc_plugins;
|
||
});
|
||
|
||
/**
|
||
* Registration | Is registered
|
||
*/
|
||
|
||
function mfn_is_registered()
|
||
{
|
||
return 36;
|
||
|
||
if ( mfn_get_purchase_code() ) {
|
||
return strlen( mfn_get_purchase_code() );
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Registration | Get purchase code
|
||
*/
|
||
|
||
function mfn_get_purchase_code()
|
||
{
|
||
$code = get_site_option( 'envato_purchase_code_7758048' );
|
||
|
||
if( ! $code ){
|
||
// BeTheme < 21.0.8 backward compatibility
|
||
$code = get_site_option( 'betheme_purchase_code' );
|
||
if( $code ){
|
||
update_site_option( 'envato_purchase_code_7758048', $code );
|
||
delete_site_option( 'betheme_purchase_code' );
|
||
delete_site_option( 'betheme_registered' );
|
||
}
|
||
}
|
||
|
||
return $code;
|
||
}
|
||
|
||
/**
|
||
* Registration | Get purchase code with asterisk
|
||
*/
|
||
|
||
function mfn_get_purchase_code_hidden()
|
||
{
|
||
$code = mfn_get_purchase_code();
|
||
|
||
if ($code) {
|
||
$code = substr($code, 0, 13);
|
||
$code = $code .'-****-****-************';
|
||
}
|
||
|
||
return $code;
|
||
}
|
||
|
||
/**
|
||
* Verify template
|
||
*/
|
||
|
||
function mfn_verify_tmpl( $id, $type ){
|
||
if(
|
||
!empty($id) &&
|
||
is_numeric( $id ) &&
|
||
get_post_type( $id ) == 'template' &&
|
||
get_post_meta($id, 'mfn_template_type', true) &&
|
||
get_post_meta($id, 'mfn_template_type', true) == $type &&
|
||
(
|
||
get_post_status( $id ) == 'publish' ||
|
||
(!empty($_GET['visual']) && $_GET['visual'] == 'iframe' )
|
||
)
|
||
) {
|
||
return $id;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* WPML ajax support for menu switcher [exclude = include]
|
||
* */
|
||
|
||
if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
|
||
add_filter( 'wpml_ls_exclude_in_menu', function( $isExcluded ) {
|
||
if ( isset( $_POST['action'] ) && 'mfnrerendersection' === $_POST['action'] ) return false;
|
||
return $isExcluded;
|
||
} );
|
||
}
|
||
|
||
/**
|
||
* Theme support
|
||
*/
|
||
|
||
if( ! mfn_opts_get('google-font-mode') ){
|
||
add_editor_style(array('css/editor-styles.min.css','https://fonts.googleapis.com/css?family=Poppins'));
|
||
}
|
||
|
||
add_theme_support( 'automatic-feed-links' );
|
||
add_theme_support( 'custom-logo', array('width'=> 145, 'height' => 35, 'flex-height' => true, 'flex-width' => true) );
|
||
add_theme_support( 'editor-styles' );
|
||
add_theme_support( 'post-formats', array('image', 'video', 'quote', 'link') );
|
||
add_theme_support( 'post-thumbnails' );
|
||
add_theme_support( 'responsive-embeds' );
|
||
add_theme_support( 'title-tag' );
|