G2A Many GEOs
SHARE
TWEET

functions-enfold

Guenni007 Mar 30th, 2020 178 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. if ( ! defined( 'ABSPATH' ) ) {  exit;  }    // Exit if accessed directly
  3.  
  4. /*
  5.  * The function within this file are theme specific:
  6.  * they are used only by this theme and not by the Avia Framework in general
  7.  */
  8.  
  9.  
  10. /* wrap embeds into a proportion containing div */
  11. if(!function_exists('avia_preload_screen'))
  12. {
  13.     function avia_preload_screen()
  14.     {
  15.         $class = avia_get_option('preloader_transitions') != "disabled" ? 'av-transition-enabled' : "";
  16.         $label = __('Loading','avia_framework');
  17.         $logo  = avia_get_option('preloader_logo');
  18.         if( is_numeric( $logo ) )
  19.         {
  20.             $logo = wp_get_attachment_image_src( $logo, 'full' );
  21.             $logo = is_array( $logo ) ? $logo[0] : '';
  22.         }
  23.        
  24.         if( $logo )
  25.         {
  26.             $class .= " av-transition-with-logo";
  27.             $logo = "<img class='av-preloading-logo' src='{$logo}' alt='{$label}' title='{$label}' />";
  28.         }
  29.        
  30.         $output  = "";
  31.         $output .=  "<div class='av-siteloader-wrap {$class}'>";
  32.         $output .=      "<div class='av-siteloader-inner'>";
  33.         $output .=          "<div class='av-siteloader-cell'>";
  34.         $output .=          $logo;
  35.         $output .=          "<div class='av-siteloader'><div class='av-siteloader-extra'></div>";
  36.         $output .=          "</div>";
  37.         $output .=      "</div>";
  38.         $output .=  "</div>";
  39.         $output .= "</div>";
  40.        
  41.         return $output;
  42.     }
  43. }
  44.  
  45.  
  46.  
  47. /* filter menu item urls */
  48. if(!function_exists('avia_menu_item_filter'))
  49. {
  50.     add_filter( 'avf_menu_items', 'avia_menu_item_filter', 10 );
  51.  
  52.     function avia_menu_item_filter ( $item  )
  53.     {
  54.        
  55.         if(isset( $item->url ) && strpos($item->url, '#DOMAIN') === 0)
  56.         {
  57.             $item->url = str_replace("#DOMAIN", get_site_url(), $item->url);
  58.         }
  59.        
  60.         return $item;
  61.     }
  62. }
  63.  
  64.  
  65.  
  66. /* filter menu item urls */
  67. if(!function_exists('avia_maps_key_for_plugins'))
  68. {
  69.     add_filter( 'script_loader_src', 'avia_maps_key_for_plugins', 10, 2 );
  70.  
  71.     function avia_maps_key_for_plugins ( $url, $handle  )
  72.     {
  73.         $key = get_option( 'gmap_api' );
  74.        
  75.         if ( ! $key ) { return $url; }
  76.        
  77.         if ( strpos( $url, "maps.google.com/maps/api/js" ) !== false || strpos( $url, "maps.googleapis.com/maps/api/js" ) !== false )
  78.         {
  79.                 //  if no key, we can generate a new link with our key
  80.             if ( strpos( $url, "key=" ) === false )
  81.             {  
  82.                 $url = av_google_maps::api_url( $key );
  83.             }
  84.         }
  85.    
  86.         return $url;
  87.     }
  88. }
  89.  
  90.  
  91.  
  92. /* wrap embeds into a proportion containing div */
  93. if(!function_exists('avia_iframe_proportion_wrap'))
  94. {
  95.     add_filter( 'embed_oembed_html', 'avia_iframe_proportion_wrap', 10, 4 );
  96.  
  97.     function avia_iframe_proportion_wrap ( $html, $url, $attr, $post_ID  )
  98.     {
  99.         if(strpos($html, '<iframe') !== false)
  100.         {
  101.             $html = "<div class='avia-iframe-wrap'>{$html}</div>";
  102.         }
  103.         return $html;
  104.     }
  105. }
  106.  
  107.  
  108.  
  109. /* AJAX SEARCH */
  110. if( ! function_exists( 'avia_append_search_nav' ) )
  111. {
  112.     //first append search item to main menu
  113.     add_filter( 'wp_nav_menu_items', 'avia_append_search_nav', 9997, 2 );
  114.     add_filter( 'avf_fallback_menu_items', 'avia_append_search_nav', 9997, 2 );
  115.  
  116.     /**
  117.      *
  118.      *
  119.      * @param string $items
  120.      * @param array $args
  121.      * @return string
  122.      */
  123.     function avia_append_search_nav ( $items, $args )
  124.     {  
  125.         if( avia_get_option( 'header_searchicon', 'header_searchicon' ) != "header_searchicon" )
  126.         {
  127.             return $items;
  128.         }
  129.        
  130.         if( avia_get_option( 'header_position', 'header_top' ) != "header_top" )
  131.         {
  132.             return $items;
  133.         }
  134.  
  135.         if( ( is_object( $args ) && $args->theme_location == 'avia') || ( is_string( $args ) && $args = 'fallback_menu' ) )
  136.         {
  137.            
  138.             ob_start();
  139.             get_search_form();
  140.             $form = ob_get_clean();
  141.            
  142.             $form = str_replace( '<form ', '<form role="search" ', $form );
  143.             $form = htmlspecialchars( $form );
  144.  
  145.             /**
  146.              * Avoid duplicate indexing or empty search page
  147.              *
  148.              * @since 4.5.3
  149.              * @param string $items
  150.              * @param array $args
  151.              * @return string
  152.              */
  153.             $nofollow = apply_filters( 'avf_nav_search_icon_nofollow', 'rel="nofollow"', $items, $args );
  154.  
  155.             $aria_label = __( 'Search', 'avia_framework' );
  156.             $aria_label = apply_filters( 'avf_nav_search_aria_label', $aria_label, $items, $args );
  157.  
  158.             $items .=   '<li id="menu-item-search" class="noMobile menu-item menu-item-search-dropdown menu-item-avia-special">';
  159.             $items .=       '<a aria-label="' . $aria_label . '" href="?s=" '. $nofollow . ' data-avia-search-tooltip="' . $form . '" ' . av_icon_string( 'search', false ) . '>';
  160.             $items .=           '<span class="avia_hidden_link_text">' . __( 'Search', 'avia_framework' ) . '</span>';
  161.             $items .=       '</a>';
  162.             $items .=   '</li>';
  163.         }
  164.        
  165.         return $items;
  166.     }
  167. }
  168.  
  169. /*  Prepare a possible fix for menu plugins, that remove theme location from menu array to exchange the menus   */
  170. if( ! function_exists( 'avia_save_menu_location' ) )
  171. {
  172.     add_filter( 'wp_nav_menu_args', 'avia_save_menu_location', 1, 1 );
  173.    
  174.     function avia_save_menu_location( $args )
  175.     {
  176.         global $avia_config;
  177.        
  178.         $avia_config['current_menu_location_output'] = isset( $args['theme_location'] ) ? $args['theme_location'] : '';
  179.        
  180.         return $args;
  181.     }
  182. }
  183.  
  184.  
  185. if( ! function_exists( 'avia_append_burger_menu' ) )
  186. {
  187.     //first append search item to main menu
  188.     add_filter( 'wp_nav_menu_items', 'avia_append_burger_menu', 9998, 2 );
  189.     add_filter( 'avf_fallback_menu_items', 'avia_append_burger_menu', 9998, 2 );
  190.  
  191.     /**
  192.      * Append the burger menu
  193.      *
  194.      * @param string $items
  195.      * @param array $args
  196.      * @return string
  197.      */
  198.     function avia_append_burger_menu ( $items , $args )
  199.     {  
  200.         global $avia_config;
  201.        
  202.         $location = ( is_object( $args ) && isset( $args->theme_location ) ) ? $args->theme_location : '';
  203.         $original_location = isset( $avia_config['current_menu_location_output'] ) ? $avia_config['current_menu_location_output'] : '';
  204.        
  205.         /**
  206.          * Allow compatibility with plugins that change menu or third party plugins to manpulate the location
  207.          *
  208.          * @used_by Enfold config-menu-exchange\config.php          10
  209.          * @since 4.1.3
  210.          */
  211.         $location = apply_filters( 'avf_append_burger_menu_location', $location, $original_location, $items , $args );
  212.        
  213.         if( ( is_object( $args ) && ( $location == 'avia' ) ) || ( is_string( $args ) && ( $args == "fallback_menu" ) ) )
  214.         {
  215.             $class = avia_get_option('burger_size');
  216.            
  217.             $items .= '<li class="av-burger-menu-main menu-item-avia-special ' . $class . '">
  218.                         <a href="#" aria-label="' . esc_attr( __( 'Menu', 'avia_framework' ) ) . '" aria-hidden="false">
  219.                             <span class="av-hamburger av-hamburger--spin av-js-hamburger">
  220.                                 <span class="av-hamburger-box">
  221.                                   <span class="av-hamburger-inner"></span>
  222.                                   <strong>' . __( 'Menu', 'avia_framework' ) . '</strong>
  223.                                 </span>
  224.                             </span>
  225.                             <span class="avia_hidden_link_text">' . esc_html( __( 'Menu', 'avia_framework' ) ) . '</span>
  226.                         </a>
  227.                        </li>';
  228.         }
  229.         return $items;
  230.     }
  231. }
  232.  
  233. if(!function_exists('avia_is_burger_menu'))
  234. {
  235.     function avia_is_burger_menu ()
  236.     {  
  237.         $burger_menu = false;
  238.        
  239.         if(avia_get_option('menu_display') !== "burger_menu") return $burger_menu;
  240.         if(avia_get_option('header_position') !== "header_top") return $burger_menu;
  241.        
  242.         //if(avia_get_option('header_position') !== "header_top") return $burger_menu;
  243.         //if(strpos(avia_get_option('header_layout'), 'main_nav_header') === false) return $burger_menu;
  244.    
  245.         return true;
  246.     }
  247. }
  248.  
  249.  
  250.  
  251.  
  252.  
  253. if( ! function_exists( 'avia_ajax_search' ) )
  254. {
  255.     //now hook into wordpress ajax function to catch any ajax requests
  256.     add_action( 'wp_ajax_avia_ajax_search', 'avia_ajax_search' );
  257.     add_action( 'wp_ajax_nopriv_avia_ajax_search', 'avia_ajax_search' );
  258.  
  259.     function avia_ajax_search()
  260.     {
  261.        
  262.         unset( $_REQUEST['action'] );
  263.        
  264.         if( empty( $_REQUEST['s'] ) )
  265.         {
  266.             $_REQUEST['s'] = array_shift( array_values( $_REQUEST ) );
  267.         }
  268.        
  269.         if( empty( $_REQUEST['s'] ) )
  270.         {
  271.             die();
  272.         }
  273.  
  274.         $defaults = array(
  275.                         'numberposts'       => 5,
  276.                         'post_type'         => 'any',
  277.                         'post_status'       => 'publish',
  278.                         'post_password'     => '',
  279.                         'suppress_filters'  => false,
  280.                         'results_hide_fields' => ''
  281.                     );
  282.  
  283.         /**
  284.          * WP Filter for the contents of the search query variable
  285.          *
  286.          * @param string
  287.          * @return string
  288.          */
  289.         $_REQUEST['s'] = apply_filters( 'get_search_query', $_REQUEST['s'] );
  290.  
  291.         $search_parameters  = array_merge( $defaults, $_REQUEST );
  292.  
  293.         if ( $search_parameters['results_hide_fields'] !== '' )
  294.         {
  295.             $search_parameters['results_hide_fields'] = explode( ',', $_REQUEST['results_hide_fields'] );
  296.         }
  297.         else
  298.         {
  299.             $search_parameters['results_hide_fields'] = array();
  300.         }
  301.  
  302.         /**
  303.          * @used_by             Avia_Custom_Pages       10
  304.          * @used_by             config-woocommerce\config.php  avia_woocommerce_ajax_search_params()    20
  305.          *
  306.          * @param array
  307.          * @return array
  308.          */
  309.         $search_query = apply_filters( 'avf_ajax_search_query', http_build_query( $search_parameters ) );
  310.        
  311.         /**
  312.          * @used_by         Avia_Relevanssi         10
  313.          *
  314.          * @param string $function_name
  315.          * @param array $search_query
  316.          * @param array $search_parameters
  317.          * @param array $defaults
  318.          * @return string
  319.          */
  320.         $query_function = apply_filters( 'avf_ajax_search_function', 'get_posts', $search_query, $search_parameters, $defaults );
  321.        
  322.         $posts = ( ( $query_function == 'get_posts') || ! function_exists( $query_function ) ) ? get_posts( $search_query ) : $query_function( $search_query, $search_parameters, $defaults );
  323.    
  324.         $search_messages = array(
  325.                 'no_criteria_matched' => __( 'Sorry, no posts matched your criteria', 'avia_framework' ),
  326.                 'another_search_term' => __( 'Please try another search term', 'avia_framework' ),
  327.                 'time_format'         => get_option( 'date_format' ),
  328.                 'all_results_query'   => http_build_query( $_REQUEST ),
  329.                 'all_results_link'    => home_url( '?' . http_build_query( $_REQUEST ) ),
  330.                 'view_all_results'    => __( 'View all results', 'avia_framework' )
  331.             );
  332.        
  333.         $search_messages = apply_filters( 'avf_ajax_search_messages', $search_messages, $search_query );
  334.        
  335.         if( empty( $posts ) )
  336.         {
  337.             $output  = "<span class='av_ajax_search_entry ajax_not_found'>";
  338.             $output .=      "<span class='av_ajax_search_image " . av_icon_string('info') . "'>";
  339.             $output .=      '</span>';
  340.             $output .=      "<span class='av_ajax_search_content'>";
  341.             $output .=          "<span class='av_ajax_search_title'>";
  342.             $output .=              $search_messages['no_criteria_matched'];
  343.             $output .=          '</span>';
  344.             $output .=          "<span class='ajax_search_excerpt'>";
  345.             $output .=              $search_messages['another_search_term'];
  346.             $output .=          '</span>';
  347.             $output .=      '</span>';
  348.             $output .= '</span>';
  349.            
  350.             echo $output;
  351.             die();
  352.         }
  353.  
  354.         //if we got posts resort them by post type
  355.         $output = '';
  356.         $sorted = array();
  357.         $post_type_obj = array();
  358.        
  359.         foreach( $posts as $post )
  360.         {
  361.             $sorted[ $post->post_type][] = $post;
  362.             if( empty( $post_type_obj[ $post->post_type ] ) )
  363.             {
  364.                 $post_type_obj[ $post->post_type ] = get_post_type_object( $post->post_type );
  365.             }
  366.         }
  367.  
  368.         //now we got everything we need to preapre the output
  369.         foreach( $sorted as $key => $post_type )
  370.         {
  371.             // check if post titles are in the hidden fields list
  372.             if ( ! in_array( 'post_titles', $search_parameters['results_hide_fields'] ) )
  373.             {
  374.                 if( isset( $post_type_obj[ $key ]->labels->name ) )
  375.                 {
  376.                     $label = apply_filters( 'avf_ajax_search_label_names', $post_type_obj[ $key ]->labels->name );
  377.                     $output .= "<h4>{$label}</h4>";
  378.                 }
  379.                 else
  380.                 {
  381.                     $output .= '<hr />';
  382.                 }
  383.             }
  384.  
  385.             foreach( $post_type as $post )
  386.             {
  387.                 $image = '';
  388.                 $extra_class = '';
  389.  
  390.                 // check if image is in the hidden fields list
  391.                 if ( ! in_array( 'image', $search_parameters['results_hide_fields'] ) )
  392.                 {
  393.                     $image = get_the_post_thumbnail( $post->ID, 'thumbnail' );
  394.                     $extra_class = $image ? 'with_image' : '';
  395.                     $post_type = $image ? '' : ( get_post_format( $post->ID ) != '' ? get_post_format( $post->ID ) : 'standard' );
  396.                     $iconfont = $image ? '' : av_icon_string( $post_type );
  397.  
  398.                 }
  399.  
  400.                 $excerpt     = '';
  401.  
  402.                 // check if post meta fields are in the hidden fields list
  403.                 if ( ! in_array( 'meta', $search_parameters['results_hide_fields'] ) )
  404.                 {
  405.                     if( ! empty($post->post_excerpt ) )
  406.                     {
  407.                         $excerpt =  apply_filters( 'avf_ajax_search_excerpt', avia_backend_truncate( $post->post_excerpt, 70, ' ', '...', true, '', true ) );
  408.                     }
  409.                     else
  410.                     {
  411.                         $excerpt = apply_filters( 'avf_ajax_search_no_excerpt', get_the_time( $search_messages['time_format'], $post->ID ), $post );
  412.                     }
  413.                 }
  414.  
  415.                 $link = apply_filters( 'av_custom_url', get_permalink( $post->ID ), $post );
  416.  
  417.                 $output .= "<a class ='av_ajax_search_entry {$extra_class}' href='{$link}'>";
  418.  
  419.                 if ( $image !== '' || $iconfont )
  420.                 {
  421.                     $output .= "<span class='av_ajax_search_image' {$iconfont}>";
  422.                     $output .=      $image;
  423.                     $output .= '</span>';
  424.                 }
  425.                 $output .= "<span class='av_ajax_search_content'>";
  426.                 $output .=      "<span class='av_ajax_search_title'>";
  427.                 $output .=          get_the_title($post->ID);
  428.                 $output .=      '</span>';
  429.                
  430.                 if( $excerpt !== '' )
  431.                 {
  432.                     $output .=      "<span class='ajax_search_excerpt'>";
  433.                     $output .=          $excerpt;
  434.                     $output .=      '</span>';
  435.                 }
  436.                 $output .=  '</span>';
  437.                 $output .= '</a>';
  438.             }
  439.         }
  440.  
  441.         $output .= "<a class='av_ajax_search_entry av_ajax_search_entry_view_all' href='{$search_messages['all_results_link']}'>{$search_messages['view_all_results']}</a>";
  442.  
  443.         echo $output;
  444.         die();
  445.     }
  446. }
  447.  
  448.  
  449. if(!function_exists('avia_social_widget_icon'))
  450. {
  451.     /*modify twitter social count widget and add social icons as iconfont*/
  452.     add_filter('avf_social_widget', 'avia_social_widget_icon',2,2);
  453.  
  454.     function avia_social_widget_icon($content, $icon)
  455.     {
  456.         global $avia_config;
  457.  
  458.         $content = "<span class='social_widget_icon' ".av_icon_string($icon)."></span>".$content;
  459.         return $content;
  460.     }
  461. }
  462.  
  463.  
  464.  
  465.  
  466.  
  467. //call functions for the theme
  468. add_filter('the_content_more_link', 'avia_remove_more_jump_link');
  469. add_post_type_support('page', 'excerpt');
  470.  
  471.  
  472.  
  473.  
  474. //allow additional file type uploads
  475. if(!function_exists('avia_upload_mimes'))
  476. {
  477.     add_filter('upload_mimes','avia_upload_mimes');
  478.     function avia_upload_mimes($mimes){ return array_merge($mimes, array ('mp4' => 'video/mp4', 'ogv' => 'video/ogg', 'webm' => 'video/webm', 'txt' => 'text/plain')); }
  479. }
  480.  
  481.  
  482.  
  483.  
  484. //change default thumbnail size and fullwidth size on theme activation
  485. if(!function_exists('avia_set_thumb_size'))
  486. {
  487.     add_action('avia_backend_theme_activation', 'avia_set_thumb_size');
  488.     function avia_set_thumb_size()
  489.     {
  490.         update_option( 'thumbnail_size_h', 80 ); update_option( 'thumbnail_size_w', 80 );
  491.         update_option( 'large_size_w', 1030 );   update_option( 'large_size_h', 1030 );
  492.     }
  493. }
  494.  
  495.  
  496.  
  497.  
  498. //add support for post thumbnails
  499. add_theme_support( 'post-thumbnails' );
  500.  
  501.  
  502.  
  503.  
  504. //advanced title + breadcrumb function
  505. if(!function_exists('avia_title'))
  506. {
  507.     function avia_title($args = false, $id = false)
  508.     {
  509.         global $avia_config;
  510.  
  511.         if(!$id) $id = avia_get_the_id();
  512.        
  513.         $header_settings = avia_header_setting();
  514.         if($header_settings['header_title_bar'] == 'hidden_title_bar') return "";
  515.        
  516.         $defaults    = array(
  517.  
  518.             'title'         => get_the_title($id),
  519.             'subtitle'      => "", //avia_post_meta($id, 'subtitle'),
  520.             'link'          => get_permalink($id),
  521.             'html'          => "<div class='{class} title_container'><div class='container'>{heading_html}{additions}</div></div>",
  522.             'heading_html'  => "<{heading} class='main-title entry-title {heading_class}'>{title}</{heading}>",
  523.             'class'         => 'stretch_full container_wrap alternate_color '.avia_is_dark_bg('alternate_color', true),
  524.             'breadcrumb'    => true,
  525.             'additions'     => "",
  526.             'heading'       => 'h1', //headings are set based on this article: http://yoast.com/blog-headings-structure/
  527.             'heading_class' => ''
  528.         );
  529.  
  530.         if ( is_tax() || is_category() || is_tag() )
  531.         {
  532.             global $wp_query;
  533.  
  534.             $term = $wp_query->get_queried_object();
  535.             $defaults['link'] = get_term_link( $term );
  536.         }
  537.         else if(is_archive())
  538.         {
  539.             $defaults['link'] = "";
  540.         }
  541.        
  542.        
  543.         // Parse incomming $args into an array and merge it with $defaults
  544.         $args = wp_parse_args( $args, $defaults );
  545.        
  546.         /**
  547.          * @used_by     config-woocommerce\config.php avia_title_args_woopage()             10
  548.          * @since < 4.0
  549.          * @return array
  550.          */
  551.         $args = apply_filters( 'avf_title_args', $args, $id );
  552.  
  553.         //disable breadcrumb if requested
  554.         if($header_settings['header_title_bar'] == 'title_bar') $args['breadcrumb'] = false;
  555.        
  556.         //disable title if requested
  557.         if($header_settings['header_title_bar'] == 'breadcrumbs_only') $args['title'] = '';
  558.  
  559.  
  560.         // OPTIONAL: Declare each item in $args as its own variable i.e. $type, $before.
  561.         extract( $args, EXTR_SKIP );
  562.  
  563.         if(empty($title)) $class .= " empty_title ";
  564.         $markup = avia_markup_helper(array('context' => 'avia_title','echo'=>false));
  565.         if(!empty($link) && !empty($title)) $title = "<a href='".$link."' rel='bookmark' title='".__('Permanent Link:','avia_framework')." ".esc_attr( $title )."' $markup>".$title."</a>";
  566.         if(!empty($subtitle)) $additions .= "<div class='title_meta meta-color'>".wpautop($subtitle)."</div>";
  567.         if($breadcrumb) $additions .= avia_breadcrumbs(array('separator' => '/', 'richsnippet' => true));
  568.  
  569.  
  570.         if(!$title) $heading_html = "";
  571.         $html = str_replace('{heading_html}', $heading_html, $html);
  572.        
  573.        
  574.         $html = str_replace( '{class}', $class, $html );
  575.         $html = str_replace( '{title}', $title, $html );
  576.         $html = str_replace( '{additions}', $additions, $html );
  577.         $html = str_replace( '{heading}', $heading, $html );
  578.         $html = str_replace( '{heading_class}', $heading_class, $html );
  579.  
  580.         if(!empty($avia_config['slide_output']) && !avia_is_dynamic_template($id) && !avia_is_overview())
  581.         {
  582.             $avia_config['small_title'] = $title;
  583.         }
  584.         else
  585.         {
  586.             return $html;
  587.         }
  588.     }
  589. }
  590.  
  591.  
  592. if( ! function_exists( 'avia_wp_get_the_title' ) )
  593. {
  594.     /**
  595.      * Retrieve post title.
  596.      *
  597.      * This is a wrapper function for backwards comp. because Enfold did not always use WP function get_the_title() to get post title.
  598.      * To avoid breaking older sites that rely on unfiltered post title we add a filter here and return unfiltered post content.
  599.      *
  600.      * @since 4.7.3.1
  601.      * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
  602.      * @return string
  603.      */
  604.     function avia_wp_get_the_title( $post = 0 )
  605.     {
  606.         $post = get_post( $post );
  607.        
  608.         if( ! $post instanceof WP_Post )
  609.         {
  610.             return '';
  611.         }
  612.        
  613.         /**
  614.          * Filter might be removed in oncoming versions
  615.          *
  616.          * @since 4.7.3.1
  617.          * @param boolean
  618.          * @param WP_Post $post
  619.          * @return boolean
  620.          */
  621.         $supress = apply_filters( 'avf_legacy_suppress_wp_filter_post_title', false, $post );
  622.        
  623.         if( false !== $supress )
  624.         {
  625.             return $post->post_title;
  626.         }
  627.        
  628.         return get_the_title( $post );
  629.     }
  630. }
  631.  
  632.  
  633.  
  634.  
  635. if( ! function_exists( 'avia_post_nav' ) )
  636. {
  637.     /**
  638.      * Add navigation link elements for single post pages
  639.      *
  640.      * @since < 4.0
  641.      * @param boolean $same_category
  642.      * @param string $taxonomy
  643.      * @return string
  644.      */
  645.     function avia_post_nav( $same_category = false, $taxonomy = 'category' )
  646.     {
  647.         global $post, $wp_version;
  648.        
  649.         /**
  650.          * Create a settings array to allow filtering and change behaviour
  651.          */
  652.         $settings = array();
  653.        
  654.         $settings['disable_post_nav_option'] = avia_get_option('disable_post_nav');
  655.         $settings['skip_output'] = ! is_singular() || 'disable_post_nav' == $settings['disable_post_nav_option'];
  656.         $settings['loop_post_nav'] = 'loop_post_nav' == $settings['disable_post_nav_option'];
  657.                
  658.         $settings['same_category'] = $same_category;
  659.         $settings['excluded_terms'] = '';
  660.         $settings['wpversion'] = $wp_version;
  661.         $settings['type'] = get_post_type();
  662.         $settings['taxonomy'] = ( $settings['type'] == 'portfolio' ) ? 'portfolio_entries' : $taxonomy;
  663.        
  664.         /**
  665.          * Don't display if a fullscreen slider is available since they overlap
  666.          */
  667.         $settings['is_fullwidth'] = false;
  668.         if( ( class_exists( 'avia_sc_layerslider' ) && ! empty( avia_sc_layerslider::$slide_count ) ) ||
  669.             ( class_exists( 'avia_sc_slider_full' ) && ! empty( avia_sc_slider_full::$slide_count ) )  )
  670.         {
  671.              $settings['is_fullwidth'] = true;
  672.         }
  673.        
  674.         $settings['is_hierarchical'] = is_post_type_hierarchical( $settings['type'] );
  675.        
  676.         /**
  677.          * Check if we need to skip output
  678.          */
  679.         if( ! $settings['skip_output'] )
  680.         {
  681.             $settings['skip_output'] = $settings['is_hierarchical'] || $settings['is_fullwidth'];
  682.         }
  683.        
  684.         /**
  685.          * Backwards compatibility - next 2 lines will be removed in a future version
  686.          */
  687.         $settings = apply_filters_deprecated( 'avia_post_nav_settings', array( $settings ), '4.5.6', 'avf_post_nav_settings', __( 'Return values handling has changed', 'avia_framework' ) );
  688.         $settings['skip_output'] = $settings['skip_output'] || ! empty( $settings['is_hierarchical'] ) || ! empty( $settings['is_fullwidth'] );
  689.        
  690.        
  691.         /**
  692.          * $settings['skip_output'] = true if you want to skip output
  693.          * $settings['same_category'] = true|false
  694.          * $settings['excluded_terms'] = array|comma speerated string of id's
  695.          *
  696.          * @used_by         config-bbpress\config.php  avia_bbpress_avf_post_nav_settings       10
  697.          * @since 4.5.6
  698.          * @return array
  699.          */
  700.         $settings = apply_filters( 'avf_post_nav_settings', $settings );
  701.            
  702.         if( true === $settings['skip_output'] )
  703.         {
  704.             return '';
  705.         }
  706.            
  707.         if(version_compare( $settings['wpversion'], '3.8', '>=' ) )
  708.         {
  709.             $entries['prev'] = get_previous_post( $settings['same_category'], $settings['excluded_terms'], $settings['taxonomy'] );
  710.             $entries['next'] = get_next_post( $settings['same_category'], $settings['excluded_terms'], $settings['taxonomy'] );
  711.         }
  712.         else
  713.         {
  714.             $entries['prev'] = get_previous_post( $settings['same_category'] );
  715.             $entries['next'] = get_next_post( $settings['same_category'] );
  716.         }
  717.        
  718.         $queried_entries = $entries;
  719.         if( true === $settings['loop_post_nav'] && ( ! $entries['prev'] instanceof WP_Post || ! $entries['next'] instanceof WP_Post ) )
  720.         {
  721.             $order = ! $entries['prev'] instanceof WP_Post ? 'DESC' : 'ASC';
  722.             $args = array(
  723.                         'post_type'         => $settings['type'],
  724.                         'post_status'       => 'publish',
  725.                         'posts_per_page'    => 1,
  726.                         'orderby'           => array( 'post_date' => $order, 'ID' => $order )
  727.                     );
  728.            
  729.            
  730.             $tax_query = array();
  731.            
  732.             if( $settings['same_category'] )
  733.             {
  734.                 $ids_in = array();
  735.                 $terms = get_the_terms( $post, $settings['taxonomy'] );
  736.                 if( is_array( $terms ) && ! empty( $terms ) )
  737.                 {
  738.                     foreach( $terms as $term )
  739.                     {
  740.                         $ids_in[] = $term->term_id;
  741.                     }
  742.                 }
  743.                
  744.                 if( ! empty( $ids_in ) )
  745.                 {
  746.                     $tax_query[] = array(
  747.                                             'taxonomy'  => $settings['taxonomy'],
  748.                                             'field'     => 'term_id',
  749.                                             'terms'     => $ids_in,
  750.                                             'operator'  => 'IN',
  751.                                     );
  752.                 }
  753.             }
  754.            
  755.             if( ! empty( $settings['excluded_terms'] ) )
  756.             {
  757.                 $ids_not_in = array();
  758.                 if( is_array( $settings['excluded_terms'] ) )
  759.                 {
  760.                     $ids_not_in = $settings['excluded_terms'];
  761.                 }
  762.                 else
  763.                 {
  764.                     $ids_not_in = explode( ',', $settings['excluded_terms'] );
  765.                 }
  766.                
  767.                 if( ! empty( $ids_not_in ) )
  768.                 {
  769.                     $tax_query[] = array(
  770.                                             'taxonomy'  => $settings['taxonomy'],
  771.                                             'field'     => 'term_id',
  772.                                             'terms'     => $ids_not_in,
  773.                                             'operator'  => 'NOT IN',
  774.                                     );
  775.                 }
  776.             }
  777.            
  778.             if( count( $tax_query ) > 1 )
  779.             {
  780.                 $tax_query['relation'] = 'AND';
  781.             }
  782.            
  783.             if( count( $tax_query ) >= 1 )
  784.             {
  785.                 $args['tax_query'] = $tax_query;
  786.             }
  787.            
  788.             /**
  789.              * Allows e.g. to change sort order of posts (see WP filter "get_{$adjacent}_post_sort") in get_adjacent_post()
  790.              *
  791.              * @since 4.5.6.2
  792.              * @param array $args
  793.              * @param array $settings
  794.              * @return array
  795.              */
  796.             $args = apply_filters( 'avf_post_nav_loop_args', $args, $settings );
  797.            
  798.             $looped = new WP_Query( $args );
  799.             if( $looped->post_count >= 1 )
  800.             {
  801.                 if( ! $entries['prev'] instanceof WP_Post )
  802.                 {
  803.                     $entries['prev'] = $looped->posts[0];
  804.                 }
  805.                 else
  806.                 {
  807.                     $entries['next'] = $looped->posts[0];
  808.                 }
  809.             }
  810.         }
  811.        
  812.         /**
  813.          * Backwards comp. only, will be removed in future
  814.          * @since < 4.0
  815.          * @added 4.5.6
  816.          */
  817.         $entries = apply_filters_deprecated( 'avia_post_nav_entries', array( $entries, $settings, $queried_entries ), '4.5.6', 'avf_post_nav_entries', __( 'Filter name has changed', 'avia_framework' ) );
  818.  
  819.         /**
  820.          * @used_by     config-events-calendar\config.php avia_events_custom_post_nav()         10
  821.          *
  822.          * @since 4.5.6
  823.          * @return array
  824.          */
  825.         $entries = apply_filters( 'avf_post_nav_entries', $entries, $settings, $queried_entries );
  826.        
  827.        
  828.         $output = '';
  829.  
  830.         foreach( $entries as $key => $entry )
  831.         {
  832.             if( empty( $entry ) )
  833.             {
  834.                 continue;
  835.             }
  836.            
  837.             $the_title  = isset($entry->av_custom_title) ? $entry->av_custom_title : avia_backend_truncate(get_the_title( $entry->ID), 75, ' ' );
  838.             $link       = isset($entry->av_custom_link)  ? $entry->av_custom_link  : get_permalink( $entry->ID );
  839.             $image      = isset($entry->av_custom_image) ? $entry->av_custom_image : get_the_post_thumbnail( $entry->ID, 'thumbnail' );
  840.            
  841.             $tc1   = $tc2 = '';
  842.             $class = $image ? 'with-image' : 'without-image';
  843.  
  844.             $output .= "<a class='avia-post-nav avia-post-{$key} {$class}' href='{$link}' >";
  845.             $output .= "    <span class='label iconfont' " . av_icon_string( $key ) . "></span>";
  846.             $output .= "    <span class='entry-info-wrap'>";
  847.             $output .= "        <span class='entry-info'>";
  848.            
  849.             $tc1     = "            <span class='entry-title'>{$the_title}</span>";
  850.             if( $image )
  851.             {
  852.                 $tc2 = "            <span class='entry-image'>{$image}</span>";
  853.             }
  854.            
  855.             $output .= $key == 'prev' ?  $tc1 . $tc2 : $tc2 . $tc1;
  856.  
  857.             $output .= "        </span>";
  858.             $output .= "    </span>";
  859.             $output .= "</a>";
  860.         }
  861.        
  862.         return $output;
  863.     }
  864. }
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871. //wrap ampersands into special calss to apply special styling
  872.  
  873. if(!function_exists('avia_ampersand'))
  874. {
  875.     add_filter('avia_ampersand','avia_ampersand');
  876.  
  877.     function avia_ampersand($content)
  878.     {
  879.         //ampersands
  880.         $content = str_replace(" &amp; "," <span class='special_amp'>&amp;</span> ",$content);
  881.         $content = str_replace(" &#038; "," <span class='special_amp'>&amp;</span> ",$content);
  882.    
  883.        
  884.         // quotes
  885.         $content = str_replace("“","<span class='special_amp'>“</span>",$content); // left double quotation mark “
  886.         $content = str_replace("”","<span class='special_amp'>”</span>",$content); // right double quotation mark ”
  887.         $content = str_replace("„","<span class='special_amp'>„</span>",$content); // double low-9 quotation mark „
  888.        
  889.        
  890.         $content = str_replace("&#8220;","<span class='special_amp'>&#8220;</span>",$content); // left double quotation mark “
  891.         $content = str_replace("&#8221;","<span class='special_amp'>&#8221;</span>",$content); // right double quotation mark ”
  892.         $content = str_replace("&#8222;","<span class='special_amp'>&#8222;</span>",$content); // double low-9 quotation mark „
  893.  
  894.         return $content;
  895.     }
  896. }
  897.  
  898.  
  899.  
  900.  
  901.  
  902. // checks if a background color of a specific region is dark  or light and returns a class name
  903. if(!function_exists('avia_is_dark_bg'))
  904. {
  905.     function avia_is_dark_bg($region, $return_only = false)
  906.     {
  907.         global $avia_config;
  908.  
  909.         $return = "";
  910.         $color = $avia_config['backend_colors']['color_set'][$region]['bg'];
  911.  
  912.         $is_dark = avia_backend_calc_preceived_brightness($color, 70);
  913.  
  914.         $return = $is_dark ? "dark_bg_color" : "light_bg_color";
  915.         if($return_only)
  916.         {
  917.             return $return;
  918.         }
  919.         else
  920.         {
  921.             echo $return;
  922.         }
  923.     }
  924. }
  925.  
  926.  
  927.  
  928.  
  929. //set post excerpt to be visible on theme acivation in user backend
  930. if(!function_exists('avia_show_menu_description'))
  931. {
  932.  
  933.     //add_action('avia_backend_theme_activation', 'avia_show_menu_description');
  934.     function avia_show_menu_description()
  935.     {
  936.         global $current_user;
  937.         get_currentuserinfo();
  938.         $old_meta_data = $meta_data = get_user_meta($current_user->ID, 'metaboxhidden_page', true);
  939.  
  940.         if(is_array($meta_data) && isset($meta_data[0]))
  941.         {
  942.             $key = array_search('postexcerpt', $meta_data);
  943.  
  944.             if($key !== false)
  945.             {
  946.                 unset($meta_data[$key]);
  947.                 update_user_meta( $current_user->ID, 'metaboxhidden_page', $meta_data, $old_meta_data );
  948.             }
  949.         }
  950.         else
  951.         {
  952.                 update_user_meta( $current_user->ID, 'metaboxhidden_page', array('postcustom', 'commentstatusdiv', 'commentsdiv', 'slugdiv', 'authordiv', 'revisionsdiv') );
  953.         }
  954.     }
  955. }
  956.  
  957.  
  958.  
  959.  
  960. /*
  961. * make google analytics code work, even if the user only enters the UA id. if the new async tracking code is entered add it to the header, else to the footer
  962. */
  963.  
  964. if( ! function_exists( 'avia_get_tracking_code' ) )
  965. {
  966.     add_action( 'init', 'avia_get_tracking_code' );
  967.  
  968.     function avia_get_tracking_code()
  969.     {
  970.         global $avia_config;
  971.        
  972.         $avia_config['analytics_code'] = '';
  973.        
  974.         $analytics = avia_get_option( 'analytics', '' );
  975.         $avia_config['analytics_code'] = trim( $analytics );
  976.        
  977.         if( empty( $avia_config['analytics_code'] ) )
  978.         {
  979.             return;
  980.         }
  981.  
  982.         if( strpos( $avia_config['analytics_code'], 'UA-' ) === 0 ) // if we only get passed the UA-id create the script for the user (universal tracking code)
  983.         {
  984.             $avia_config['analytics_code'] = "
  985. <!-- Global site tag (gtag.js) - Google Analytics -->
  986. <script id='google_analytics_script' class='google_analytics_scripts' async src='https://www.googletagmanager.com/gtag/js?id=" . $avia_config['analytics_code'] . "'></script>
  987. <script class='google_analytics_scripts' type='text/javascript'>
  988. window.dataLayer = window.dataLayer || [];
  989. function gtag(){dataLayer.push(arguments);}
  990. gtag('js', new Date());
  991. gtag('config', '" . $avia_config['analytics_code'] . "', { 'anonymize_ip': true });
  992. </script>
  993. ";
  994.         }
  995.        
  996.         add_action( 'wp_footer', 'avia_print_tracking_code', 10000 );
  997.     }
  998.  
  999.     function avia_print_tracking_code()
  1000.     {
  1001.         global $avia_config;
  1002.  
  1003.         if( ! empty( $avia_config['analytics_code'] ) )
  1004.         {
  1005.             //extract UA ID from code
  1006.             $UAID = false;
  1007.             $extra_code = '';
  1008.             $match = array();
  1009.             preg_match( "!UA-[0-9]+-[0-9]+!", $avia_config['analytics_code'], $match );
  1010.            
  1011.             if( ! empty( $match ) && isset( $match[0] ) )
  1012.             {
  1013.                 $UAID = $match[0];
  1014.             }
  1015.            
  1016.             $code = json_encode( $avia_config['analytics_code'] );
  1017.            
  1018.             //if we got a valid uaid, add the js cookie check
  1019.             if( $UAID )
  1020.             {
  1021.                 $extra_code = "
  1022. <script type='text/javascript'>
  1023.            
  1024.     (function($) {
  1025.                    
  1026.             /*  check if google analytics tracking is disabled by user setting via cookie - or user must opt in.    */
  1027.                    
  1028.             var analytics_code = {$code}.replace(/\\\"/g, '\"' );
  1029.             var html = document.getElementsByTagName('html')[0];
  1030.  
  1031.             $('html').on( 'avia-cookie-settings-changed', function(e)
  1032.             {
  1033.                     var cookie_check = html.className.indexOf('av-cookies-needs-opt-in') >= 0 || html.className.indexOf('av-cookies-can-opt-out') >= 0;
  1034.                     var allow_continue = true;
  1035.                     var silent_accept_cookie = html.className.indexOf('av-cookies-user-silent-accept') >= 0;
  1036.                     var script_loaded = $( 'script.google_analytics_scripts' );
  1037.  
  1038.                     if( cookie_check && ! silent_accept_cookie )
  1039.                     {
  1040.                         if( ! document.cookie.match(/aviaCookieConsent/) || html.className.indexOf('av-cookies-session-refused') >= 0 )
  1041.                         {
  1042.                             allow_continue = false;
  1043.                         }
  1044.                         else
  1045.                         {
  1046.                             if( ! document.cookie.match(/aviaPrivacyRefuseCookiesHideBar/) )
  1047.                             {
  1048.                                 allow_continue = false;
  1049.                             }
  1050.                             else if( ! document.cookie.match(/aviaPrivacyEssentialCookiesEnabled/) )
  1051.                             {
  1052.                                 allow_continue = false;
  1053.                             }
  1054.                             else if( document.cookie.match(/aviaPrivacyGoogleTrackingDisabled/) )
  1055.                             {
  1056.                                 allow_continue = false;
  1057.                             }
  1058.                         }
  1059.                     }
  1060.  
  1061.                     if( ! allow_continue )
  1062.                     {
  1063. //                      window['ga-disable-{$UAID}'] = true;
  1064.                         if( script_loaded.length > 0 )
  1065.                         {
  1066.                             script_loaded.remove();
  1067.                         }
  1068.                     }
  1069.                     else
  1070.                     {
  1071.                         if( script_loaded.length == 0 )
  1072.                         {
  1073.                             $('head').append( analytics_code );
  1074.                         }
  1075.                     }
  1076.             });
  1077.            
  1078.             $('html').trigger( 'avia-cookie-settings-changed' );
  1079.                        
  1080.     })( jQuery );
  1081.                
  1082. </script>";
  1083.             }
  1084.            
  1085. //          echo $extra_code . $avia_config['analytics_code'];
  1086.            
  1087.             echo $extra_code;
  1088.         }
  1089.     }
  1090. }
  1091.  
  1092.  
  1093. /*
  1094. function that checks which header style we are using. In general the whole site has the same header active, based on the option in theme options->header
  1095. however, for the theme demo we need to showcase all headers, thats why we can simply add a custom field key to overwrite the default heading
  1096. */
  1097.  
  1098. if(!function_exists('avia_header_setting'))
  1099. {
  1100.     function avia_header_setting($single_val = false)
  1101.     {
  1102.         global $avia_config;
  1103.         if(isset($avia_config['header_settings']) && $single_val && isset($avia_config['header_settings'][$single_val])) return $avia_config['header_settings'][$single_val];
  1104.         if(isset($avia_config['header_settings']) && !$single_val) return $avia_config['header_settings']; //return cached header setting if available
  1105.        
  1106.         $defaults = array(  'header_position'           => 'header_top',
  1107.                             'header_layout'             => 'logo_left menu_right',
  1108.                             'header_size'               => 'slim',
  1109.                             'header_custom_size'        => '',
  1110.                             'header_sticky'             => 'header_sticky',
  1111.                             'header_shrinking'          =>'header_shrinking',
  1112.                             'header_title_bar'          => '',
  1113.                             'header_social'             => '',
  1114.                             'header_unstick_top'        => '',
  1115.                             'header_secondary_menu'     => '',
  1116.                             'header_stretch'            => '',
  1117.                             'header_custom_size'        => '',
  1118.                             'header_phone_active'       => '',
  1119.                             'header_replacement_logo'   => '',
  1120.                             'header_replacement_logo_title' => '',
  1121.                             'header_replacement_logo_alt'   => '',
  1122.                             'header_replacement_menu'   => '',
  1123.                             'submenu_visibility'        => '',
  1124.                             'overlay_style'             => 'av-overlay-side',
  1125.                             'header_searchicon'         => true,
  1126.                             'header_mobile_activation'  => 'mobile_menu_phone',
  1127.                             'phone'                     =>'',
  1128.                             'sidebarmenu_sticky'        => 'conditional_sticky',
  1129.                             'layout_align_content'      => 'content_align_center',
  1130.                             'sidebarmenu_widgets'       => '',
  1131.                             'sidebarmenu_social'        => 'disabled',
  1132.                             'header_menu_border'        => '',
  1133.                             'header_style'              => '',
  1134.                             'blog_global_style'         => '',
  1135.                             'menu_display'              => '',
  1136.                             'alternate_menu'            => '',
  1137.                             'submenu_clone'             => 'av-submenu-noclone',
  1138.                           );
  1139.                            
  1140.         $settings = avia_get_option();
  1141.        
  1142.         //overwrite with custom fields if they are set
  1143.         $post_id = avia_get_the_id();
  1144.         if($post_id && is_singular())
  1145.         {  
  1146.             $custom_fields = get_post_custom($post_id);
  1147.            
  1148.             foreach( $defaults as $key => $default )
  1149.             {
  1150.                 if(!empty($custom_fields[$key]) && !empty($custom_fields[$key][0]) )
  1151.                 {
  1152.                     $settings[$key] = $custom_fields[$key][0];
  1153.                 }
  1154.             }
  1155.            
  1156.             //check if header transparency is set to true
  1157.             $transparency = post_password_required() ? false : get_post_meta($post_id, 'header_transparency', true);
  1158.         }
  1159.                
  1160.         $header = shortcode_atts($defaults, $settings);
  1161.         $header['header_scroll_offset'] = avia_get_header_scroll_offset($header);
  1162.        
  1163.         //if sidebar main menu is active set the header accordingly and return the sidebar header
  1164.         if($header['header_position'] != "header_top") return avia_header_setting_sidebar($header, $single_val);
  1165.         //------------------------------------------------------------------------------------------------------
  1166.         //------------------------------------------------------------------------------------------------------
  1167.  
  1168.  
  1169.         //if header main menu is above the logo set a var to indicate that and disable transparency and shrinking
  1170.         if( strpos( $header['header_layout'] , 'top_nav_header' ) !== false )
  1171.         {
  1172.             $header['header_menu_above'] = true;
  1173.             $header['header_shrinking']  = 'disabled';
  1174.             $transparency = false;
  1175.         }
  1176.        
  1177.         //set header transparency
  1178.         $header['header_transparency'] = "";
  1179.         if(!empty($transparency)) $header['header_transparency'] = 'header_transparency';
  1180.         if(!empty($transparency) && strpos($transparency, 'glass')) $header['header_transparency'] .= ' header_glassy';
  1181.         if(!empty($transparency) && strpos($transparency, 'with_border')) $header['header_transparency'] .= ' header_with_border';
  1182.         if(!empty($transparency) && strpos($transparency, 'hidden')) $header['disabled'] = true;
  1183.         if(!empty($transparency) && strpos($transparency, 'scrolldown'))
  1184.         {
  1185.             $header['header_transparency'] .= ' header_scrolldown';
  1186.             $header['header_sticky'] = 'header_sticky';
  1187.         }
  1188.        
  1189.        
  1190.         //deactivate title bar if header is transparent
  1191.         if(!empty($transparency)) $header['header_title_bar'] = 'hidden_title_bar';
  1192.        
  1193.         //sticky and shrinking are tied together
  1194.         if($header['header_sticky'] == 'disabled') { $header['header_shrinking'] = 'disabled'; $header['header_scroll_offset'] =  0; }
  1195.        
  1196.         //if the custom height is less than 70 shrinking doesnt really work
  1197.         if($header['header_size'] == 'custom' && (int) $header['header_custom_size'] < 65) $header['header_shrinking'] = 'disabled';
  1198.        
  1199.         //deactivate icon menu if we dont have the correct header
  1200.         if(strpos(avia_get_option('header_layout'), 'main_nav_header') === false) $header['menu_display'] = "";
  1201.        
  1202.         if($header['menu_display'] == 'burger_menu') { $header['header_menu_border'] = "";}
  1203.        
  1204.         if(avia_is_burger_menu())
  1205.         {
  1206.             $header['header_mobile_activation'] = "mobile_menu_tablet";
  1207.         }
  1208.        
  1209.         //create a header class so we can style properly
  1210.         $header_class_var = array(  'header_position',
  1211.                                     'header_layout',
  1212.                                     'header_size',
  1213.                                     'header_sticky',
  1214.                                     'header_shrinking',
  1215.                                     'header_stretch',
  1216.                                     'header_mobile_activation',
  1217.                                     'header_transparency',
  1218.                                     'header_searchicon',
  1219.                                     'header_unstick_top',
  1220.                                     'header_menu_border',
  1221.                                     'header_style'
  1222.                                 );
  1223.                                
  1224.         $header['header_class'] = "";
  1225.        
  1226.         foreach($header_class_var as $class_name)
  1227.         {
  1228.             if(!empty($header[$class_name]))
  1229.             {
  1230.                 if($header[$class_name] == "disabled") $header[$class_name] = $class_name."_disabled";
  1231.                 $header['header_class'] .= " av_".str_replace(' ',' av_',$header[$class_name]);
  1232.             }
  1233.         }
  1234.        
  1235.         //set manual flag if we should display the top bar
  1236.         $header['header_topbar'] = false;
  1237.         if(strpos($header['header_social'], 'extra_header_active') !== false || strpos($header['header_secondary_menu'], 'extra_header_active') !== false || !empty($header['header_phone_active'])){ $header['header_topbar'] = 'header_topbar_active'; }
  1238.        
  1239.         //set manual flag if the menu is at the bottom
  1240.         $header['bottom_menu'] = false;
  1241.         if(strpos($header['header_layout'],'bottom_nav_header') !== false)
  1242.         {
  1243.             $header['bottom_menu'] = 'header_bottom_menu_active';
  1244.         }
  1245.         else
  1246.         {
  1247.             $header['header_class'] .= " av_bottom_nav_disabled ";
  1248.         }
  1249.        
  1250.        
  1251.         //header class that tells us to use the alternate logo
  1252.         if(!empty($header['header_replacement_logo']))
  1253.         {
  1254.             $header['header_class'] .= " av_alternate_logo_active";
  1255.             $header_replacement_logo_id = avia_get_attachment_id( $header['header_replacement_logo'] );
  1256.             $header_replacement_logo_src = wp_get_attachment_image_src( $header_replacement_logo_id, 'full' );
  1257.             if( is_array( $header_replacement_logo_src ) )
  1258.             {
  1259.                 $header['header_replacement_logo'] = $header_replacement_logo_src[0];
  1260.                
  1261.                 /**
  1262.                  * We added title and alt attribute - this allows to ignore it
  1263.                  *
  1264.                  * @since 4.5.7.2
  1265.                  * @param boolean
  1266.                  * @param int
  1267.                  * @rturn boolean
  1268.                  */
  1269.                 if( false === apply_filters( 'avf_hide_transparency_logo_meta', false, $header_replacement_logo_id ) )
  1270.                 {
  1271.                     $header['header_replacement_logo_title'] = get_the_title( $header_replacement_logo_id );
  1272.                     $header['header_replacement_logo_alt'] = get_post_meta( $header_replacement_logo_id, '_wp_attachment_image_alt', true );
  1273.                 }
  1274.             }
  1275.         }
  1276.        
  1277.         //header class that tells us to use the alternate logo
  1278.         if(empty($header['header_menu_border']))
  1279.         {
  1280.             $header['header_class'] .= " av_header_border_disabled";
  1281.         }
  1282.        
  1283.         /**
  1284.          * Modify the header settings
  1285.          *
  1286.          * @param array $header
  1287.          * @param string $context
  1288.          * @return array
  1289.          */
  1290.         $header = apply_filters('avf_header_setting_filter', $header, 'setting_header' );
  1291.  
  1292.         //make settings available globaly
  1293.         $avia_config['header_settings'] = $header;
  1294.        
  1295.         if(!empty($single_val) && isset($header[$single_val])) return $header[$single_val];
  1296.        
  1297.         return $header;
  1298.     }
  1299. }
  1300.  
  1301. if ( ! function_exists( 'avia_get_attachment_id' ) ) {
  1302.     /**
  1303.      * Get the Attachment ID for a given image URL.
  1304.      *
  1305.      * @link   http://wordpress.stackexchange.com/a/7094
  1306.      *
  1307.      * @param  string $url
  1308.      *
  1309.      * @return boolean|integer
  1310.      */
  1311.     function avia_get_attachment_id( $url ) {
  1312.  
  1313.         $dir = wp_upload_dir();
  1314.  
  1315.         // baseurl never has a trailing slash
  1316.         if ( false === strpos( $url, $dir['baseurl'] . '/' ) ) {
  1317.             // URL points to a place outside of upload directory
  1318.             return false;
  1319.         }
  1320.  
  1321.         $file  = basename( $url );
  1322.         $query = array(
  1323.             'post_type'  => 'attachment',
  1324.             'fields'     => 'ids',
  1325.             'meta_query' => array(
  1326.                 array(
  1327.                     'key'     => '_wp_attached_file',
  1328.                     'value'   => $file,
  1329.                     'compare' => 'LIKE',
  1330.                 ),
  1331.             )
  1332.         );
  1333.  
  1334.         // query attachments
  1335.         $ids = get_posts( $query );
  1336.  
  1337.         if ( ! empty( $ids ) ) {
  1338.  
  1339.             foreach ( $ids as $id ) {
  1340.  
  1341.                 // first entry of returned array is the URL
  1342.                 $img_src = wp_get_attachment_image_src( $id, 'full' );
  1343.                 $img_url = array_shift( $img_src );
  1344.                 if ( $url === $img_url )
  1345.                     return $id;
  1346.             }
  1347.         }
  1348.  
  1349.         $query['meta_query'][0]['key'] = '_wp_attachment_metadata';
  1350.  
  1351.         // query attachments again
  1352.         $ids = get_posts( $query );
  1353.  
  1354.         if ( empty( $ids) )
  1355.             return false;
  1356.  
  1357.         foreach ( $ids as $id ) {
  1358.  
  1359.             $meta = wp_get_attachment_metadata( $id );
  1360.  
  1361.             foreach ( $meta['sizes'] as $size => $values ) {
  1362.  
  1363.                 if ( $values['file'] === $file && $url === array_shift( wp_get_attachment_image_src( $id, $size ) ) )
  1364.                     return $id;
  1365.             }
  1366.         }
  1367.  
  1368.         return false;
  1369.     }
  1370. }      
  1371.  
  1372.  
  1373. if(!function_exists('avia_header_setting_sidebar'))
  1374. {
  1375.     function avia_header_setting_sidebar( $header, $single_val = false )
  1376.     {
  1377.         $overwrite = array(    
  1378.                             'header_layout'             => 'logo_left menu_right',
  1379.                             'header_size'               => 'slim',
  1380.                             'header_custom_size'        => '',
  1381.                             'header_sticky'             => 'disabled',
  1382.                             'header_shrinking'          => 'disabled',
  1383.                             'header_title_bar'          => 'hidden_title_bar',
  1384.                             'header_social'             => '',
  1385.                             'header_secondary_menu'     => '',
  1386.                             'header_stretch'            => '',
  1387.                             'header_custom_size'        => '',
  1388.                             'header_phone_active'       => 'disabled',
  1389.                             'header_replacement_logo'   => '',
  1390.                             'header_replacement_logo_title' => '',
  1391.                             'header_replacement_logo_alt'   => '',
  1392.                             'header_replacement_menu'   => '',
  1393.                             'header_mobile_activation'  => 'mobile_menu_phone',
  1394.                             'phone'                     =>'',
  1395.                             'header_menu_border'        => '',
  1396.                             'header_topbar'             => false,
  1397.                             'bottom_menu'               => false,
  1398.                             'header_style'              => '',
  1399.                             'menu_display'              => '',
  1400.                             'submenu_clone'             => 'av-submenu-noclone',
  1401.                         );
  1402.        
  1403.         $header = array_merge( $header, $overwrite );
  1404.        
  1405.         //  Reset to actual user setting - otherwise burger menu will result in wrong behaviour
  1406.         $settings = avia_get_option();
  1407.         $header['submenu_clone'] = isset( $settings['submenu_clone'] ) && in_array( $settings['submenu_clone'], array( 'av-submenu-clone', 'av-submenu-noclone' ) ) ? $settings['submenu_clone'] : 'av-submenu-noclone';
  1408.    
  1409.         if( strpos($header['header_position'] , 'left') === false ) $header['sidebarmenu_sticky'] = "never_sticky";
  1410.        
  1411.         $header['header_class'] = " av_".str_replace(' ',' av_',$header['header_position']." ".$header['sidebarmenu_sticky']);
  1412.        
  1413.         /**
  1414.          * Modify the header settings
  1415.          *
  1416.          * @param array $header
  1417.          * @param string $context
  1418.          * @return array
  1419.          */
  1420.         $header = apply_filters('avf_header_setting_filter', $header, 'setting_sidebar' );
  1421.        
  1422.         //make settings available globaly
  1423.         $avia_config['header_settings'] = $header;
  1424.        
  1425.         if(!empty($single_val) && isset($header[$single_val])) return $header[$single_val];
  1426.            
  1427.         return $header;
  1428.     }
  1429. }
  1430.  
  1431.  
  1432. if(!function_exists('avia_get_header_scroll_offset'))
  1433. {
  1434.     function avia_get_header_scroll_offset($header = array())
  1435.     {
  1436.             //#main data attribute used to calculate scroll offset
  1437.             $modifier = 0;
  1438.            
  1439.             if(empty($header))
  1440.             {
  1441.                 $header['header_position'] = avia_get_option('header_position','header_top');
  1442.                 $header['header_size'] = avia_get_option('header_size');
  1443.                 $header['header_custom_size'] = avia_get_option('header_custom_size');
  1444.                 $header['header_style'] = avia_get_option('header_style');
  1445.             }
  1446.            
  1447.             if("minimal_header" == $header['header_style']) $modifier = 2;
  1448.            
  1449.             switch($header['header_size'])
  1450.             {
  1451.                 case 'large':   $header['header_scroll_offset'] = 116; break;
  1452.                 case 'custom':  $header['header_scroll_offset'] = $header['header_custom_size'] - $modifier; break;
  1453.                 default :       $header['header_scroll_offset'] = 88; break;
  1454.             }
  1455.            
  1456.             if($header['header_position'] != 'header_top') $header['header_scroll_offset'] = 0;
  1457.            
  1458.             return $header['header_scroll_offset'];
  1459.     }
  1460. }
  1461.  
  1462. if(!function_exists('avia_header_class_string'))
  1463. {
  1464.     function avia_header_class_string($necessary = array() , $prefix = "html_"){
  1465.        
  1466.         if(empty($necessary)) $necessary = array(   'header_position',
  1467.                                                     'header_layout',
  1468.                                                     'header_size',
  1469.                                                     'header_sticky',
  1470.                                                     'header_shrinking',
  1471.                                                     'header_topbar',
  1472.                                                     'header_transparency',
  1473.                                                     'header_mobile_activation',
  1474.                                                     'header_searchicon',
  1475.                                                     'layout_align_content',
  1476.                                                     'header_unstick_top',
  1477.                                                     'header_stretch',
  1478.                                                     'header_style',
  1479.                                                     'blog_global_style',
  1480.                                                     'menu_display',
  1481.                                                     'submenu_visibility',
  1482.                                                     'overlay_style',
  1483.                                                     'alternate_menu',
  1484.                                                     'submenu_clone',
  1485.  
  1486.                                                 );
  1487.  
  1488.         $settings   = avia_header_setting();
  1489.         $class      = array();
  1490.         $post_id    = function_exists('avia_get_the_id') ? avia_get_the_id() : get_the_ID();
  1491.        
  1492.         foreach($necessary as $class_name)
  1493.         {
  1494.             if(!empty($settings[$class_name]))
  1495.             {
  1496.                 $result = array_filter(explode(' ', $settings[$class_name]));
  1497.                 $class = array_merge($class, $result);
  1498.             }
  1499.         }
  1500.        
  1501.         if($post_id) $class[] = "entry_id_".$post_id;
  1502.         if(is_admin_bar_showing()) $class[] = "av_admin_bar_active";
  1503.        
  1504.        
  1505.        
  1506.         $class = apply_filters('avf_header_classes', $class, $necessary, $prefix);
  1507.        
  1508.         if(!empty($class))
  1509.         {
  1510.             $class = array_unique($class);
  1511.             $class = " ".$prefix.implode(" ".$prefix, $class);
  1512.         }
  1513.  
  1514.        
  1515.         return $class;
  1516.     }
  1517. }
  1518.  
  1519.  
  1520.  
  1521. if(!function_exists('avia_blog_class_string'))
  1522. {
  1523.     function avia_blog_class_string($necessary = array() , $prefix = "av-"){
  1524.        
  1525.         if(empty($necessary)) $necessary = array(   'blog-meta-author',
  1526.                                                     'blog-meta-comments',
  1527.                                                     'blog-meta-category',
  1528.                                                     'blog-meta-date',
  1529.                                                     'blog-meta-html-info',
  1530.                                                     'blog-meta-tag',
  1531.                                                 );
  1532.         $class      = array();
  1533.         $settings   = avia_get_option();
  1534.    
  1535.         foreach($necessary as $class_name)
  1536.         {
  1537.             if(isset($settings[$class_name]) && $settings[$class_name] == "disabled") $class[] = $class_name."-disabled";
  1538.         }
  1539.        
  1540.         if(empty($class)) $class = "";
  1541.         if(!empty($class))
  1542.         {
  1543.             $class = array_unique($class);
  1544.             if(!empty($class[0]))
  1545.             {
  1546.                 $class = " ".$prefix.implode(" ".$prefix, $class);
  1547.             }
  1548.             else
  1549.             {
  1550.                 $class = "";
  1551.             }
  1552.         }
  1553.        
  1554.  
  1555.         return $class;
  1556.     }
  1557. }
  1558.  
  1559.  
  1560.  
  1561. if(!function_exists('avia_header_html_custom_height'))
  1562. {
  1563.     function avia_header_html_custom_height()
  1564.     {
  1565.         $settings = avia_header_setting();
  1566.        
  1567.         if($settings['header_size'] == "custom")
  1568.         {
  1569.             $modifier = 0;
  1570.             $size = $settings['header_custom_size'];
  1571.             $bottom_bar = $settings['bottom_menu'] == true ? 52 : 0;
  1572.             $top_bar    = $settings['header_topbar'] == true ? 30 : 0;
  1573.            
  1574.             if(!empty($settings['header_style']) && "minimal_header" == $settings['header_style'] ){ $modifier = 2;}
  1575.            
  1576.            
  1577.             $html =  "";
  1578.             $html .= "\n<style type='text/css' media='screen'>\n";
  1579.             $html .= " #top #header_main > .container, #top #header_main > .container .main_menu  .av-main-nav > li > a,";
  1580.             $html .= " #top #header_main #menu-item-shop .cart_dropdown_link{ height:{$size}px; line-height: {$size}px; }\n";
  1581.             $html .= " .html_top_nav_header .av-logo-container{ height:{$size}px;  }\n";
  1582.             $html .= " .html_header_top.html_header_sticky #top #wrap_all #main{ padding-top:".((int)$size + $bottom_bar + $top_bar - $modifier)."px; } \n";
  1583.             $html .= "</style>\n";
  1584.            
  1585.             echo $html;
  1586.         }
  1587.        
  1588.     }
  1589.  
  1590.     add_action('wp_head', 'avia_header_html_custom_height');
  1591.    
  1592. }
  1593.  
  1594.  
  1595. /*
  1596. * Display sidebar widgets in the main navigation area when it is set as sidebar instead of top
  1597. */
  1598. if(!function_exists('avia_sidebar_menu_additions'))
  1599. {
  1600.     function avia_sidebar_menu_additions()
  1601.     {
  1602.         $settings = avia_header_setting();
  1603.         $output   = "";
  1604.        
  1605.         if($settings['header_position'] != "header_top")
  1606.         {
  1607.             /*add social icons*/
  1608.             if($settings['sidebarmenu_social'] != "disabled")
  1609.             {
  1610.                 $social_args = array('outside'=>'ul', 'inside'=>'li', 'append' => '');
  1611.                 $social = avia_social_media_icons($social_args, false);
  1612.                 if($social) $output .= "<div class='av-sidebar-social-container'>".$social."</div>";
  1613.             }
  1614.            
  1615.        
  1616.             /*add widgets*/
  1617.             if(!empty( $settings['sidebarmenu_widgets']))
  1618.             {
  1619.                 if('av-auto-widget-logic' == $settings['sidebarmenu_widgets'])
  1620.                 {
  1621.                
  1622.                 }
  1623.                 else if( is_dynamic_sidebar( $settings['sidebarmenu_widgets'] ) )
  1624.                 {
  1625.                     ob_start();
  1626.                     dynamic_sidebar( $settings['sidebarmenu_widgets'] );
  1627.                     $output .= ob_get_clean();
  1628.                     $output = "<aside class='avia-custom-sidebar-widget-area sidebar sidebar_right'>".$output."</aside>";
  1629.                 }
  1630.             }
  1631.         }
  1632.        
  1633.         echo $output;
  1634.        
  1635.     }
  1636.  
  1637.     add_action('ava_after_main_menu', 'avia_sidebar_menu_additions');
  1638.    
  1639. }
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645. /*
  1646. * Display a subnavigation for pages that is automatically generated, so the users doesnt need to work with widgets
  1647. */
  1648. if(!function_exists('avia_sidebar_menu'))
  1649. {
  1650.     function avia_sidebar_menu($echo = true)
  1651.     {
  1652.         $sidebar_menu = "";
  1653.  
  1654.         $subNav = avia_get_option('page_nesting_nav');
  1655.  
  1656.        
  1657.         $the_id = @get_the_ID();
  1658.         $args   = array();
  1659.         global $post;
  1660.  
  1661.         if($subNav && $subNav != 'disabled' && !empty($the_id) && is_page())
  1662.         {
  1663.             $subNav = false;
  1664.             $parent = $post->ID;
  1665.             $sidebar_menu = "";
  1666.  
  1667.             if (!empty($post->post_parent))
  1668.             {
  1669.                 if(isset($post->ancestors)) $ancestors  = $post->ancestors;
  1670.                 if(!isset($ancestors)) $ancestors  = get_post_ancestors($post->ID);
  1671.                 $root       = count($ancestors)-1;
  1672.                 $parent     = $ancestors[$root];
  1673.             }
  1674.  
  1675.             $args = array('title_li'=>'', 'child_of'=>$parent, 'echo'=>0, 'sort_column'=>'menu_order, post_title');
  1676.  
  1677.             //enables user to change query args
  1678.             $args = apply_filters('avia_sidebar_menu_args', $args, $post);
  1679.  
  1680.             //hide or show child pages in menu - if the class is set to 'widget_nav_hide_child' the child pages will be hidden
  1681.             $display_child_pages = apply_filters('avia_sidebar_menu_display_child', 'widget_nav_hide_child', $args, $post);
  1682.  
  1683.             $children = wp_list_pages($args);
  1684.  
  1685.             if ($children)
  1686.             {
  1687.                 $default_sidebar = false;
  1688.                 $sidebar_menu .= "<nav class='widget widget_nav_menu $display_child_pages'><ul class='nested_nav'>";
  1689.                 $sidebar_menu .= $children;
  1690.                 $sidebar_menu .= "</ul></nav>";
  1691.             }
  1692.         }
  1693.  
  1694.         $sidebar_menu = apply_filters('avf_sidebar_menu_filter', $sidebar_menu, $args, $post);
  1695.  
  1696.         if($echo == true) { echo $sidebar_menu; } else { return $sidebar_menu; }
  1697.     }
  1698. }
  1699.  
  1700.  
  1701.  
  1702. /*
  1703. show tag archive page for post type - without this code you'll get 404 errors: http://wordpress.org/support/topic/custom-post-type-tagscategories-archive-page
  1704. */
  1705. if(!function_exists('avia_fix_tag_archive_page'))
  1706. {
  1707.     function avia_fix_tag_archive_page($query)
  1708.     {
  1709.         $post_types = get_post_types();
  1710.  
  1711.         if ( is_category() || is_tag())
  1712.         {
  1713.             if(!is_admin() && $query->is_main_query() )
  1714.             {
  1715.                 $post_type = get_query_var(get_post_type());
  1716.  
  1717.                 if ($post_type) {
  1718.                     $post_type = $post_type;
  1719.                 } else {
  1720.                     $post_type = $post_types;
  1721.                 }
  1722.                 $query->set('post_type', $post_type);
  1723.             }
  1724.         }
  1725.  
  1726.  
  1727.         return $query;
  1728.     }
  1729.     add_filter('pre_get_posts', 'avia_fix_tag_archive_page');
  1730. }
  1731.  
  1732.  
  1733.  
  1734. /*
  1735.  * add html5.js script to head section - required for IE compatibility
  1736.  */
  1737. if(!function_exists('avia_print_html5_js_script'))
  1738. {
  1739.     add_action('wp_head', 'avia_print_html5_js_script');
  1740.  
  1741.     function avia_print_html5_js_script()
  1742.     {
  1743.         $template_url = get_template_directory_uri();
  1744.         $output = '';
  1745.  
  1746.         $output .= '<!--[if lt IE 9]>';
  1747.         $output .= '<script src="'.$template_url.'/js/html5shiv.js"></script>';
  1748.         $output .= '<![endif]-->';
  1749.         echo $output;
  1750.     }
  1751. }
  1752.  
  1753.  
  1754. if(!function_exists('avia_add_compat_header'))
  1755. {
  1756.     add_filter('wp_headers', 'avia_add_compat_header');
  1757.     function avia_add_compat_header($headers)
  1758.     {
  1759.         if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)
  1760.         {
  1761.             $headers['X-UA-Compatible'] = 'IE=edge,chrome=1';
  1762.         }
  1763.         return $headers;
  1764.     }
  1765. }
  1766.  
  1767.  
  1768. if( ! function_exists( 'avia_add_hide_featured_image_select' ) )
  1769. {  
  1770.     /**
  1771.      * Add a selectbox to hide featured image on single post
  1772.      *
  1773.      * @param array $elements
  1774.      * @return array
  1775.      */
  1776.     function avia_add_hide_featured_image_select( array $elements )
  1777.     {  
  1778.         if( ! is_admin() || ! function_exists( 'get_current_screen' ) )
  1779.         {
  1780.             return $elements;
  1781.         }
  1782.        
  1783.         $screen = get_current_screen();
  1784.         if( ! $screen instanceof WP_Screen )
  1785.         {
  1786.             return $elements;
  1787.         }
  1788.  
  1789.         $hide_pt = apply_filters( 'avf_display_featured_image_posttypes', array( 'post', 'portfolio' ) );
  1790.        
  1791.         if( ! in_array( $screen->post_type, $hide_pt ) )
  1792.         {
  1793.             return $elements;
  1794.         }
  1795.        
  1796.         switch( $screen->post_type )
  1797.         {
  1798.             case 'post':
  1799.                 $desc = __( 'Select to display featured image for a single post entry.', 'avia_framework' );
  1800.                 break;
  1801.             case 'portfolio':
  1802.                 $desc = __( 'Select to display featured image for a single portfolio entry.', 'avia_framework' );
  1803.                 break;
  1804.             default:
  1805.                 $desc = apply_filters( 'avf_display_featured_image_desc', __( 'Select to display featured image for a single entry.', 'avia_framework' ) );
  1806.                 break;
  1807.         }
  1808.        
  1809.         $elements[] = array(
  1810.                         'slug'      => 'layout',
  1811.                         'name'      => __( 'Featured Image', 'avia_framework' ),
  1812.                         'desc'      => $desc,
  1813.                         'id'        => '_avia_hide_featured_image',
  1814.                         'type'      => 'select',
  1815.                         'std'       => '',
  1816.                         'class'     => 'avia-style',
  1817.                         'subtype'   => array(
  1818.                                             __( 'Show on single entry', 'avia_framework' ) => '',
  1819.                                             __( 'Hide on single entry', 'avia_framework' ) => '1'
  1820.                                         )
  1821.                     );
  1822.        
  1823.         return $elements;
  1824.     }
  1825.    
  1826.     add_filter( 'avf_builder_elements', 'avia_add_hide_featured_image_select', 10, 1 );
  1827. }
  1828.  
  1829. if(!function_exists('avia_active_caching'))
  1830. {
  1831.     function avia_active_caching()
  1832.     {
  1833.         if(defined('W3TC') || defined('WPCACHEHOME') || class_exists('HyperCache') || class_exists('\\quick_cache\\plugin'))
  1834.         {
  1835.             return true;
  1836.         }
  1837.         return false;
  1838.     }
  1839. }
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845. if(!function_exists('avia_menu_button_style'))
  1846. {
  1847.     add_action('wp_nav_menu_item_custom_fields', 'avia_menu_button_style', 10, 4);
  1848.  
  1849.     function avia_menu_button_style($output, $item, $depth, $args)
  1850.     {
  1851.             $item_id = $item->ID;
  1852.             $key = "style";
  1853.             $name  = "menu-item-avia-".$key; //name prefix must be the same for all items
  1854.             $value = get_post_meta( $item->ID, '_'.$name, true);
  1855.             ?>
  1856.    
  1857.             <!-- *************** start conditional logic input fields *************** -->
  1858.             <p class="field-avia-link-style description description-wide avia_mega_menu avia_mega_menu_d0">
  1859.                 <label for="<?php echo $key; ?>">
  1860.                     <?php _e( 'Menu Style' ); ?><br />
  1861.                     <select id="<?php echo $name . "-". $item_id;?>" class="widefat edit-menu-item-target" name="<?php echo $name . "[". $item_id ."]";?>">
  1862.                         <option value=""                                        <?php selected( $value,  ''); ?>                                        ><?php _e('Default Style'); ?>  </option>
  1863.                         <option value="av-menu-button av-menu-button-colored"   <?php selected( $value,  'av-menu-button av-menu-button-colored'); ?>   ><?php _e('Button Style (Colored)' ); ?>    </option>
  1864.                         <option value="av-menu-button av-menu-button-bordered"  <?php selected( $value,  'av-menu-button av-menu-button-bordered'); ?>  ><?php _e('Button Style (Bordered)'); ?>    </option>
  1865.                     </select>
  1866.                 </label>
  1867.             </p>
  1868.            
  1869.             <?php
  1870.            
  1871.            
  1872.     }
  1873.    
  1874.     add_filter('avf_mega_menu_post_meta_fields','avia_menu_button_style_save',10,3);
  1875.     function avia_menu_button_style_save($check, $menu_id, $menu_item_db)
  1876.     {
  1877.         $check = array_merge($check, array('style'));
  1878.         return $check;
  1879.     }
  1880.    
  1881.    
  1882. }
  1883. if(!function_exists('avia_generate_grid_dimension'))
  1884. {
  1885.     add_action('ava_generate_styles','avia_generate_grid_dimension', 30, 3); /*after theme update*/
  1886.    
  1887.     function avia_generate_grid_dimension($options, $color_set, $styles)
  1888.     {
  1889.         global $avia_config;
  1890.         if ( $options !== "" ){ extract($options); }
  1891.        
  1892.         if(empty($content_width))  $content_width   = 73;
  1893.         if(empty($combined_width)) $combined_width  = 100;
  1894.         if(empty($responsive_size)) $responsive_size = "1130px";
  1895.        
  1896.         if($responsive_size != "")
  1897.         {
  1898.             $avia_config['style'][] = array(
  1899.             'key'   =>  'direct_input',
  1900.             'value' => ".container {width:".$combined_width."%;} .container .av-content-small.units {width:".$content_width."%; }
  1901.            
  1902.               .responsive .boxed#top , .responsive.html_boxed.html_header_sticky #header,
  1903.               .responsive.html_boxed.html_header_transparency #header{ width: ".$responsive_size."; max-width:90%; }
  1904.               .responsive .container{ max-width: ".$responsive_size."; }
  1905.             "
  1906.             );
  1907.         }
  1908.     }
  1909. }
  1910.  
  1911.  
  1912.  
  1913. /*
  1914. function that disables the alb drag and drop for non admins
  1915. */
  1916.  
  1917. if( ! function_exists( 'avia_disable_alb_drag_drop' ) )
  1918. {
  1919.     function avia_disable_alb_drag_drop( $disable )
  1920.     {
  1921.         if( ! current_user_can( 'switch_themes' ) || avia_get_option( 'lock_alb_for_admins', 'disabled' ) != 'disabled' )
  1922.         {
  1923.             $disable = avia_get_option( 'lock_alb', 'disabled' ) != 'disabled' ? true : false;
  1924.         }      
  1925.        
  1926.         return $disable;
  1927.     }
  1928.    
  1929.     add_filter( 'avf_allow_drag_drop', 'avia_disable_alb_drag_drop', 30, 1 );
  1930. }
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938. /*
  1939. function to display frame
  1940. */
  1941.  
  1942. if(!function_exists('avia_framed_layout'))
  1943. {
  1944.     function avia_framed_layout($options, $color_set, $styles)
  1945.     {
  1946.         global $avia_config;
  1947.         extract($styles);
  1948.  
  1949.         if(isset($body_style) && $body_style === "av-framed-box")
  1950.         {
  1951.             $avia_config['style'][] = array(
  1952.             'key'   =>  'direct_input',
  1953.             'value' => "
  1954.            
  1955.             html.html_av-framed-box{ padding:{$frame_width}px; }
  1956.             html.html_av-framed-box{ padding:{$frame_width}px; }
  1957.             html.html_av-framed-box .av-frame{ width: {$frame_width}px; height: {$frame_width}px; background:$body_color;}
  1958.            
  1959.            
  1960.             .html_header_top.html_header_sticky.html_av-framed-box #header_main,
  1961.             .html_header_top.html_header_sticky.html_av-framed-box #header_meta{
  1962.                 margin:0 {$frame_width}px;
  1963.             }
  1964.            
  1965.             html .avia-post-prev{left: {$frame_width}px; }
  1966.             html .avia-post-next{right:{$frame_width}px; }
  1967.            
  1968.             html.html_av-framed-box.html_av-overlay-side .av-burger-overlay-scroll{ right:{$frame_width}px; }
  1969.             "
  1970.             );
  1971.         }
  1972.     }
  1973.    
  1974.     add_action('ava_generate_styles', 'avia_framed_layout', 40 , 3);
  1975. }
  1976.  
  1977. if(!function_exists('avia_framed_layout_bars'))
  1978. {
  1979.     function avia_framed_layout_bars()
  1980.     {
  1981.         if( avia_get_option('color-body_style') == "av-framed-box" )
  1982.         {
  1983.             $output  = "";
  1984.             $output .= "<div class='av-frame av-frame-top av-frame-vert'></div>";
  1985.             $output .= "<div class='av-frame av-frame-bottom av-frame-vert'></div>";
  1986.             $output .= "<div class='av-frame av-frame-left av-frame-hor'></div>";
  1987.             $output .= "<div class='av-frame av-frame-right av-frame-hor'></div>";
  1988.            
  1989.             echo $output;
  1990.         }
  1991.     }
  1992.    
  1993.     add_action('wp_footer', 'avia_framed_layout_bars', 10 );
  1994. }
  1995.  
  1996.  
  1997.  
  1998.  
  1999.  
  2000.  
  2001.  
  2002.  
  2003. /*
  2004. function that saves the style options array into an external css file rather than fetching the data from the database
  2005. */
  2006.  
  2007. if(!function_exists('avia_generate_stylesheet'))
  2008. {
  2009.     add_action('ava_after_theme_update',            'avia_generate_stylesheet', 30, 1); /*after theme update*/
  2010.     add_action('ava_after_import_demo_settings',    'avia_generate_stylesheet', 30, 1); /*after demo settings imoport*/
  2011.     add_action('avia_ajax_after_save_options_page', 'avia_generate_stylesheet', 30, 1); /*after options page saving*/
  2012.    
  2013.     function avia_generate_stylesheet($options = false)
  2014.     {
  2015.         global $avia;
  2016.        
  2017.         $safe_name = avia_backend_safe_string($avia->base_data['prefix']);
  2018.         $safe_name = apply_filters('avf_dynamic_stylesheet_filename', $safe_name);
  2019.  
  2020.         if( defined('AVIA_CSSFILE') && AVIA_CSSFILE === false )
  2021.         {
  2022.             $dir_flag           = update_option( 'avia_stylesheet_dir_writable'.$safe_name, 'false' );
  2023.             $stylesheet_flag    = update_option( 'avia_stylesheet_exists'.$safe_name, 'false' );
  2024.             return;
  2025.         }
  2026.  
  2027.         $wp_upload_dir  = wp_upload_dir();
  2028.         $stylesheet_dir = $wp_upload_dir['basedir'] . '/dynamic_avia';
  2029.         $stylesheet_dir = str_replace('\\', '/', $stylesheet_dir);
  2030.         $stylesheet_dir = apply_filters('avia_dyn_stylesheet_dir_path',  $stylesheet_dir);
  2031.         $isdir = avia_backend_create_folder($stylesheet_dir);
  2032.  
  2033.         /*
  2034.         * directory could not be created (WP upload folder not writeable)
  2035.         * @todo save error in db and output error message for user.
  2036.         * @todo maybe add mkdirfix: http://php.net/manual/de/function.mkdir.php
  2037.         */
  2038.  
  2039.         if($isdir === false)
  2040.         {
  2041.             $dir_flag = update_option( 'avia_stylesheet_dir_writable'.$safe_name, 'false' );
  2042.             $stylesheet_flag = update_option( 'avia_stylesheet_exists'.$safe_name, 'false' );
  2043.             return;
  2044.         }
  2045.  
  2046.         /*
  2047.          *  Go ahead - WP managed to create the folder as expected
  2048.          */
  2049.         $stylesheet = trailingslashit( $stylesheet_dir ) . $safe_name.'.css';
  2050.         $stylesheet = apply_filters('avia_dyn_stylesheet_file_path', $stylesheet);
  2051.  
  2052.  
  2053.         //import avia_superobject and reset the options array
  2054.         $avia_superobject = $GLOBALS['avia'];
  2055.         $avia_superobject->reset_options();
  2056.  
  2057.         //regenerate style array after saving options page so we can create a new css file that has the actual values and not the ones that were active when the script was called
  2058.         avia_prepare_dynamic_styles();
  2059.  
  2060.         //generate stylesheet content
  2061.         $generate_style = new avia_style_generator($avia_superobject,false,false,false);
  2062.         $styles         = $generate_style->create_styles();
  2063.  
  2064.         $created        = avia_backend_create_file($stylesheet, $styles, true);
  2065.  
  2066.         if($created === true)
  2067.         {
  2068.             $dir_flag = update_option( 'avia_stylesheet_dir_writable'.$safe_name, 'true' );
  2069.             $stylesheet_flag = update_option( 'avia_stylesheet_exists'.$safe_name, 'true' );
  2070.             $dynamic_id = update_option( 'avia_stylesheet_dynamic_version'.$safe_name, uniqid() );
  2071.         }
  2072.         else
  2073.         {
  2074.             $dir_flag = update_option( 'avia_stylesheet_dir_writable'.$safe_name, 'false' );
  2075.             $stylesheet_flag = update_option( 'avia_stylesheet_exists'.$safe_name, 'false' );
  2076.             $dynamic_id = delete_option( 'avia_stylesheet_dynamic_version'.$safe_name);
  2077.         }
  2078.     }
  2079. }
  2080.  
  2081.  
  2082.  
  2083. /*favicon in front and backend*/
  2084. add_action('wp_head', 'avia_add_favicon');
  2085. add_action('admin_head', 'avia_add_favicon');
  2086.  
  2087.  
  2088. function avia_add_favicon()
  2089. {
  2090.     echo "\n".avia_favicon(avia_get_option('favicon'))."\n";
  2091. }
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097.  
  2098. /**
  2099.  * AVIA Mailchimp WIDGET
  2100.  */
  2101.  
  2102. if (!class_exists('avia_mailchimp_widget'))
  2103. {
  2104.         class avia_mailchimp_widget extends WP_Widget {
  2105.    
  2106.         static $script_loaded = 0;
  2107.    
  2108.         function __construct() {
  2109.             //Constructor
  2110.             $widget_ops = array('classname' => 'avia_mailchimp_widget', 'description' => 'A widget that displays a Mailchimp newsletter signup form' );
  2111.             parent::__construct( 'avia_mailchimp_widget', THEMENAME.' Mailchimp Newsletter Signup', $widget_ops );
  2112.         }
  2113.  
  2114.         function widget($args, $instance)
  2115.         {
  2116.             extract($args, EXTR_SKIP);
  2117.             echo $before_widget;
  2118.            
  2119.             if ( !empty( $instance['title'] ) ) { echo $before_title . $instance['title'] . $after_title; };
  2120.            
  2121.             $shortcode  = "[av_mailchimp";
  2122.             $shortcode .= " list='".$instance['mailchimp_list']."'";
  2123.             $shortcode .= " listonly='true'";
  2124.             $shortcode .= " hide_labels='true'";
  2125.             $shortcode .= " double_opt_in='".$instance['double_optin']."'";
  2126.             $shortcode .= " sent='".$instance['success']."'";
  2127.             $shortcode .= " button='".$instance['submit_label']."'";
  2128.            
  2129.             $shortcode .= "]";
  2130.                
  2131.            
  2132.             echo "<div class='av-mailchimp-widget av-mailchimp-widget-style-".$instance['styling']." '>";
  2133.             echo do_shortcode($shortcode );
  2134.             echo "</div>";
  2135.            
  2136.             echo $after_widget;
  2137.  
  2138.         }
  2139.  
  2140.  
  2141.         function update($new_instance, $old_instance)
  2142.         {
  2143.             $instance = $old_instance;
  2144.             $instance['title']          = strip_tags($new_instance['title']);
  2145.             $instance['success']        = strip_tags($new_instance['success']);
  2146.             $instance['styling']        = strip_tags($new_instance['styling']);
  2147.             $instance['double_optin']   = strip_tags($new_instance['double_optin']);
  2148.             $instance['mailchimp_list'] = strip_tags($new_instance['mailchimp_list']);
  2149.             $instance['submit_label'] = strip_tags($new_instance['submit_label']);
  2150.            
  2151.             return $instance;
  2152.         }
  2153.  
  2154.  
  2155.  
  2156.         function form($instance)
  2157.         {
  2158.             $instance = wp_parse_args( (array) $instance, array(
  2159.                 'title'             => __('Newsletter','avia_framework'),
  2160.                 'mailchimp_list'    => '',
  2161.                 'styling'           => '' ,
  2162.                 'double_optin'      => 'true',
  2163.                 'success'           => __('Thank you for subscribing to our newsletter!','avia_framework'),
  2164.                 'submit_label'      => __('Subscribe','avia_framework'),
  2165.                 )
  2166.             );
  2167.                
  2168.             $title          = strip_tags($instance['title']);
  2169.             $mailchimp_list = strip_tags($instance['mailchimp_list']);
  2170.             $styling        = strip_tags($instance['styling']);
  2171.             $double_optin   = strip_tags($instance['double_optin']);
  2172.             $success        = strip_tags($instance['success']);
  2173.             $submit_label   = strip_tags($instance['submit_label']);
  2174.  
  2175.             $lists      = get_option('av_chimplist');
  2176.             $newlist    = array('Select a Mailchimp list...' => "");
  2177.        
  2178.             if(empty($lists))
  2179.             {
  2180.                 return;
  2181.             }
  2182.            
  2183.             foreach($lists as $key => $list_item)
  2184.             {
  2185.                 $newlist[$list_item['name']] = $key;
  2186.             }
  2187.             $lists = $newlist;
  2188.  
  2189.     ?>
  2190.             <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title','avia_framework');?>:
  2191.             <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></label></p>
  2192.  
  2193.             <p>
  2194.                 <label for="<?php echo $this->get_field_id('mailchimp_list'); ?>"><?php _e('Mailchimp list to subscribe to','avia_framework');?></label>
  2195.                 <select class="widefat" id="<?php echo $this->get_field_id('mailchimp_list'); ?>" name="<?php echo $this->get_field_name('mailchimp_list'); ?>">
  2196.                     <?php
  2197.                     $list = "";
  2198.  
  2199.                     foreach ($lists as $answer => $key)
  2200.                     {
  2201.                         $selected = "";
  2202.                         if($key == $mailchimp_list) $selected = 'selected="selected"';
  2203.  
  2204.                         $list .= "<option $selected value='$key'>$answer</option>";
  2205.                     }
  2206.                     $list .= "</select>";
  2207.                     echo $list;
  2208.                     ?>
  2209.  
  2210.  
  2211.             </p>
  2212.            
  2213.            
  2214.             <p>
  2215.                 <label for="<?php echo $this->get_field_id('styling'); ?>"><?php _e('Signup Form Styling','avia_framework');?></label>
  2216.                 <select class="widefat" id="<?php echo $this->get_field_id('styling'); ?>" name="<?php echo $this->get_field_name('styling'); ?>">
  2217.                     <?php
  2218.                     $answers = array(
  2219.                        
  2220.                         __('Default','avia_framework') => "",
  2221.                         __('Boxed','avia_framework') => "boxed_form",
  2222.                        
  2223.                     );
  2224.                    
  2225.                     $list = "";
  2226.                    
  2227.                     foreach ($answers as $answer => $key)
  2228.                     {
  2229.                         $selected = "";
  2230.                         if($key == $styling) $selected = 'selected="selected"';
  2231.  
  2232.                         $list .= "<option $selected value='$key'>$answer</option>";
  2233.                     }
  2234.                     $list .= "</select>";
  2235.                     echo $list;
  2236.                     ?>
  2237.             </p>
  2238.            
  2239.             <p>
  2240.                 <label for="<?php echo $this->get_field_id('double_optin'); ?>"><?php _e('Activate double opt-in?','avia_framework');?></label>
  2241.                 <select class="widefat" id="<?php echo $this->get_field_id('double_optin'); ?>" name="<?php echo $this->get_field_name('double_optin'); ?>">
  2242.                     <?php
  2243.                     $answers = array(
  2244.                        
  2245.                         __('Yes','avia_framework') => "true",
  2246.                         __('No','avia_framework') => "",
  2247.                        
  2248.                     );
  2249.                    
  2250.                     $list = "";
  2251.                    
  2252.                     foreach ($answers as $answer => $key)
  2253.                     {
  2254.                         $selected = "";
  2255.                         if($key == $double_optin) $selected = 'selected="selected"';
  2256.  
  2257.                         $list .= "<option $selected value='$key'>$answer</option>";
  2258.                     }
  2259.                     $list .= "</select>";
  2260.                     echo $list;
  2261.                     ?>
  2262.             </p>
  2263.            
  2264.             <p><label for="<?php echo $this->get_field_id('success'); ?>"><?php _e('Message if user subscribes successfully','avia_framework');?>:
  2265.             <input class="widefat" id="<?php echo $this->get_field_id('success'); ?>" name="<?php echo $this->get_field_name('success'); ?>" type="text" value="<?php echo esc_attr($success); ?>" /></label></p>
  2266.  
  2267.             <p>
  2268.                
  2269.                 <p><label for="<?php echo $this->get_field_id('submit_label'); ?>"><?php _e('Submit Button Label','avia_framework');?>:
  2270.             <input class="widefat" id="<?php echo $this->get_field_id('submit_label'); ?>" name="<?php echo $this->get_field_name('submit_label'); ?>" type="text" value="<?php echo esc_attr($submit_label); ?>" /></label></p>
  2271.  
  2272.             <p>
  2273.  
  2274.  
  2275.  
  2276.     <?php
  2277.         }
  2278.     }
  2279.        
  2280.     register_widget( 'avia_mailchimp_widget' );
  2281. }
  2282.  
  2283. /**
  2284.  * WP core hack see https://core.trac.wordpress.org/ticket/15551
  2285.  *
  2286.  * Paging does not work on single custom post type pages - always a redirect to page 1 by WP
  2287.  *
  2288.  *
  2289.  * @since 4.0.6
  2290.  */
  2291. if( ! function_exists( 'avia_wp_cpt_request_redirect_fix' ) )
  2292. {
  2293.     function avia_wp_cpt_request_redirect_fix( $request )
  2294.     {
  2295.         $args = array(
  2296.                     'public'    =>  true,
  2297.                     '_builtin'  =>  false
  2298.                 );
  2299.  
  2300.         $cpts = get_post_types( $args, 'names', 'and' );
  2301.  
  2302.         if (    isset( $request->query_vars['post_type'] ) &&
  2303.                 in_array( $request->query_vars['post_type'], $cpts ) &&
  2304.                 true === $request->is_singular &&
  2305.                 - 1 == $request->current_post &&
  2306.                 true === $request->is_paged
  2307.             )
  2308.         {
  2309.             add_filter( 'redirect_canonical', '__return_false' );
  2310.         }
  2311.  
  2312.         return $request;
  2313.     }
  2314.  
  2315.     add_action( 'parse_query', 'avia_wp_cpt_request_redirect_fix' );
  2316. }
  2317.  
  2318.  
  2319.  
  2320. /**
  2321.  * mobile sizes that overwrite elements default sizes
  2322.  */
  2323. if( ! function_exists( 'av_print_custom_font_size' ) )
  2324. {
  2325.     function av_print_custom_font_size( $request )
  2326.     {
  2327.         echo AviaHelper::av_print_mobile_sizes();
  2328.     }
  2329.  
  2330.     add_action( 'wp_footer', 'av_print_custom_font_size' );
  2331. }
  2332.  
  2333.  
  2334. /**
  2335.  * disable element live preview
  2336.  */
  2337. if( ! function_exists( 'av_disable_live_preview' ) )
  2338. {
  2339.     function av_disable_live_preview( $data )
  2340.     {
  2341.         if(avia_get_option('preview_disable') == "preview_disable")
  2342.         {
  2343.             $data['preview'] = 0;
  2344.         }
  2345.        
  2346.         return $data;
  2347.     }
  2348.  
  2349.     add_filter( 'avb_backend_editor_element_data_filter', 'av_disable_live_preview' );
  2350. }
  2351.  
  2352.  
  2353. /**
  2354.  * Adds a copyright field to the upload and edit dialogue of the media manager
  2355.  *
  2356.  * @author tinabillinger
  2357.  * @since 4.3
  2358.  */
  2359.  
  2360.  
  2361. if( ! function_exists( 'av_attachment_copyright_field_edit' ) )
  2362. {
  2363.     function av_attachment_copyright_field_edit($form_fields, $post)
  2364.     {
  2365.  
  2366.         $form_fields['av_copyright_field'] = array(
  2367.             'label' => __('Copyright'),
  2368.             'input' => 'text',
  2369.             'value' => get_post_meta( $post->ID, '_avia_attachment_copyright', true ),
  2370.         );
  2371.  
  2372.         return $form_fields;
  2373.     }
  2374.     add_filter( 'attachment_fields_to_edit', 'av_attachment_copyright_field_edit', null, 2 );
  2375. }
  2376.  
  2377.  
  2378. /**
  2379.  * Saves the copyright field created by filter above
  2380.  *
  2381.  * @author tinabillinger
  2382.  * @since 4.3
  2383.  */
  2384.  
  2385.  
  2386. if( ! function_exists( 'av_attachment_copyright_field_save' ) )
  2387. {
  2388.     function av_attachment_copyright_field_save($post, $attachment)
  2389.     {
  2390.         if ( ! empty( $attachment['av_copyright_field'] ) )
  2391.         {
  2392.             update_post_meta( $post['ID'], '_avia_attachment_copyright', $attachment['av_copyright_field'] );
  2393.         }
  2394.         else {
  2395.             delete_post_meta( $post['ID'], '_avia_attachment_copyright' );
  2396.         }
  2397.         return $post;
  2398.     }
  2399.  
  2400.     add_filter( 'attachment_fields_to_save', 'av_attachment_copyright_field_save', null, 2 );
  2401. }
  2402.  
  2403.  
  2404. /**
  2405.  * Attaches the information from the copyright field to get_the_post_thumbnail()
  2406.  * The added tag is initally hidden by CSS, and can be made visible by choice
  2407.  *
  2408.  * @author tinabillinger
  2409.  * @since 4.3
  2410.  */
  2411. /*
  2412.  * Add 'copyright info to get_the_post_thumbnail()
  2413.  */
  2414.  
  2415. if( ! function_exists( 'avia_post_thumbnail_html' ) )
  2416. {
  2417.     function avia_post_thumbnail_html($html, $post_id, $post_thumbnail_id, $size, $attr)
  2418.     {
  2419.         $attachment_id = get_post_thumbnail_id($post_id);
  2420.         $copyright_text = get_post_meta($attachment_id, '_avia_attachment_copyright', true );
  2421.  
  2422.         if ($copyright_text) {
  2423.             $html .= "<small class='avia-copyright'>{$copyright_text}</small>";
  2424.         }
  2425.         return $html;
  2426.     }
  2427.     if (! is_admin()){
  2428.         add_filter('post_thumbnail_html', 'avia_post_thumbnail_html', 99, 5);
  2429.     }
  2430. }
  2431.  
  2432.  
  2433. if( ! function_exists( 'av_builder_meta_box_elements_content' ) )
  2434. {
  2435.     /**
  2436.      * Adjust element content to reflect main option settings
  2437.      * e.g. with sdding page as footer feature we need to adjust select box content of footer settings
  2438.      *
  2439.      * @since 4.2.7
  2440.      * @added_by Günter
  2441.      * @param array $elements
  2442.      * @return array
  2443.      */
  2444.     function av_builder_meta_box_elements_content( array $elements )
  2445.     {
  2446.        
  2447.         $footer_options = avia_get_option( 'display_widgets_socket', 'all' );
  2448.        
  2449.         if( false !== strpos( $footer_options, 'page' ) )
  2450.         {
  2451.             $desc = __( 'Display the footer page?', 'avia_framework' );
  2452.             $subtype = array(
  2453.                             __("Default Layout - set in",'avia_framework')." ".THEMENAME." > ". __('Footer','avia_framework') => '',
  2454.                             __('Use selected page to display as footer and socket','avia_framework')    => 'page_in_footer_socket',
  2455.                             __('Use selected page to display as footer (no socket)','avia_framework')   => 'page_in_footer',
  2456.                             __('Don\'t display the socket & page','avia_framework')                         => 'nofooterarea'
  2457.                         );
  2458.         }
  2459.         else
  2460.         {
  2461.             $desc = __( 'Display the footer widgets?', 'avia_framework' );
  2462.             $subtype = array(
  2463.                             __("Default Layout - set in",'avia_framework')." ".THEMENAME." > ". __('Footer','avia_framework') => '',
  2464.                             __('Display the footer widgets & socket','avia_framework')                  => 'all',
  2465.                             __('Display only the footer widgets (no socket)','avia_framework')          => 'nosocket',
  2466.                             __('Display only the socket (no footer widgets)','avia_framework')          => 'nofooterwidgets',
  2467.                             __('Don\'t display the socket & footer widgets','avia_framework')           => 'nofooterarea'
  2468.                         );
  2469.         }
  2470.        
  2471.         foreach( $elements as &$element )
  2472.         {
  2473.             if( 'footer' == $element['id'] )
  2474.             {
  2475.                 $element['desc'] = $desc;
  2476.                 $element['subtype'] = $subtype;
  2477.             }      
  2478.         }
  2479.        
  2480.         return $elements;
  2481.     }
  2482.    
  2483.     add_filter( 'avf_builder_elements', 'av_builder_meta_box_elements_content', 10000, 1 );
  2484. }
  2485.  
  2486.  
  2487. if( ! function_exists( 'av_return_100' ) )
  2488. {
  2489.     /**
  2490.     * Sets the default image to 100% quality for more beautiful images when used in conjunction with img optimization plugins
  2491.     *
  2492.     * @since 4.3
  2493.     * @added_by Kriesi
  2494.     */
  2495.     function av_return_100(){ return 100; }
  2496.     add_filter('jpeg_quality', 'av_return_100');
  2497.     add_filter('wp_editor_set_quality', 'av_return_100');
  2498. }
  2499.  
  2500.  
  2501. /**
  2502.  * Comment form order
  2503.  * Restore comment form order to look like previous versions were comment field is below name/mail/website
  2504.  *
  2505.  * @author Kriesi
  2506.  * @since 4.5
  2507.  */
  2508.  
  2509. if( ! function_exists( 'av_comment_field_order_reset' ) )
  2510. {
  2511.     function av_comment_field_order_reset( $fields )
  2512.     {
  2513.         $comment_field = $fields['comment'];
  2514.         unset( $fields['comment'] );
  2515.         $fields['comment'] = $comment_field;
  2516.         return $fields;
  2517.     }
  2518.  
  2519.     add_filter( 'comment_form_fields', 'av_comment_field_order_reset' );
  2520. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top