\n";
$gf = ABSOLUTE_WVR_GOOGLE_FONTS;
if (aweaver_getopt('font_set_cryllic')) {
$gf = str_replace('&subset=','&subset=cyrillic-ext,', $gf);
}
if (aweaver_getopt('font_set_greek')) {
$gf = str_replace('&subset=','&subset=greek,greek-ext,', $gf);
}
if (aweaver_getopt('font_set_hebrew')) {
$gf = str_replace('&subset=','&subset=hebrew,', $gf);
}
if (aweaver_getopt('font_set_vietnamese')) {
$gf = str_replace('&subset=','&subset=vietnamese,', $gf);
}
echo $gf . "\n";
}
endif;
//--
// =============================== >>> ACTION: aweaver_nav <<< ================================
if (!has_action('aweaver_nav')) : // plugin can override
add_action( 'aweaver_nav', 'aweaver_nav_action');
function aweaver_nav_action($where) {
// displays primary and secondary menus in the proper place
switch ( $where ) {
case 'top':
if ( aweaver_getopt ('m_primary_move') )
get_template_part('templates/menu','primary');
break;
case 'bottom':
default:
if ( !aweaver_getopt ('m_primary_move') )
get_template_part('templates/menu','primary');
break;
}
}
endif;
//--
// =============================== >>> ACTION: aweaver_after_theme_activate <<< ================================
// remember some things when switching themes
add_action('after_switch_theme','aweaver_after_theme_activate_action');
function aweaver_after_theme_activate_action() {
// fires when theme activated
// restore our last set of saved settings
$fix = get_theme_mod('saved_nav_menu_locations' );
set_theme_mod('nav_menu_locations', $fix);
}
add_action('switch_theme','aweaver_theme_deactivate_action');
function aweaver_theme_deactivate_action() {
// fires when new theme has switched in. Theme settings will be for NEW theme
$old_theme = get_option('theme_switched');
$old = aweaver_get_theme_mod('nav_menu_locations', $old_theme);
aweaver_set_theme_mod('saved_nav_menu_locations', $old, $old_theme);
$old = aweaver_get_theme_mod('sidebars_widgets', $old_theme);
aweaver_set_theme_mod('saved_sidebars_widgets', $old, $old_theme);
}
function aweaver_get_theme_mods( $theme_slug ) {
$mods = get_option( "theme_mods_$theme_slug" );
return $mods;
}
/**
* Retrieve theme modification value for the OLD theme.
*/
function aweaver_get_theme_mod( $name, $theme) {
$mods = aweaver_get_theme_mods($theme);
if ( isset( $mods[$name] ) ) {
/**
* Filters the theme modification, or 'theme_mod', value.
*/
return apply_filters( "theme_mod_{$name}", $mods[$name] );
}
return false;
}
/**
* Update theme modification value for the Specified theme.
*
*/
function aweaver_set_theme_mod( $name, $value, $theme ) {
$mods = aweaver_get_theme_mods($theme);
$old_value = isset( $mods[ $name ] ) ? $mods[ $name ] : false;
/**
* Filters the theme mod value on save.
*
*/
$mods[ $name ] = apply_filters( "pre_set_theme_mod_{$name}", $value, $old_value );
//**** $theme = get_option( 'stylesheet' );
update_option( "theme_mods_$theme", $mods );
}
/* --------------------------------- CALLBACKS -------------------------------
*
*/
// ============================================= >>> CALLBACK: aweaver_page_menu <<< ======================================
function aweaver_page_menu( $args = array() ) {
// this is the callback for the default menu
$defaults = array('sort_column' => 'menu_order, post_title', 'menu_class' => 'wvrx-menu', 'echo' => true, 'link_before' => '', 'link_after' => '');
$args = wp_parse_args( $args, $defaults );
$menu = '';
$list_args = $args;
if (aweaver_getopt('menu_nohome'))
$args['show_home'] = false;
else
$args['show_home'] = true;
// look for pages to hide from menu
$ex_list = '';
// Show Home in the menu
if ( $args['show_home'] ) {
$text = __( 'Home', 'absolute-weaver' );
$class = 'class="default-home-menu-item"';
if ( is_home() || is_front_page() ) $class = 'class="default-home-menu-item current_page_item"';
$menu .= '
' . $args['link_before'] . $text . $args['link_after'] . '';
// If the front page is a page, add it to the exclude list
if (get_option('show_on_front') == 'page') {
if ( !empty( $list_args['exclude'] ) ) {
$list_args['exclude'] .= ',';
} else {
$list_args['exclude'] = '';
}
$list_args['exclude'] .= get_option('page_on_front');
}
}
$list_args['echo'] = false;
$list_args['title_li'] = '';
$menu .= str_replace( array( "\r", "\n", "\t" ), '', wp_list_pages( $list_args) );
$site_title = '';
if ( aweaver_getopt('m_primary_site_title_left') ) {
$classt = 'site-title-on-menu wvrx-menu-html wvrx-menu-left';
// font-family
$val = aweaver_getopt( 'site_title_font_family' );
if ( $val && $val != 'default' ) {
$classt .= ' font-' . $val;
}
$classt .= aweaver_get_bold_italic('site_title','bold');
$classt .= aweaver_get_bold_italic('site_title','italic');
$site_title = '' . get_bloginfo('name') . '';
}
$left = aweaver_getopt('m_primary_html_left');
$right = aweaver_getopt('m_primary_html_right');
if ( aweaver_getopt('m_primary_logo_left') ) {
$custom_logo_url = aweaver_get_wp_custom_logo_url();
// We have a logo. Logo is go.
if ( $custom_logo_url ) {
$left = apply_filters('aweaver_menu_logo','', $custom_logo_url) . $left; // +since: 3.1.10: add alt=
}
}
if ( $left ) {
$hide = ' ' . aweaver_getopt('m_primary_hide_left');
$left = '';
}
if ( aweaver_getopt('use_smartmenus') ) { // Plus option
$hamburger = apply_filters('aweaver_mobile_menu_name',aweaver_getopt('m_primary_hamburger'));
if ( $hamburger == '' ) {
$alt = aweaver_getopt('mobile_alt_label');
if ( $alt == '')
$hamburger = '';
else
$hamburger = '';
}
$left = '{$left}"; // +since: 3.1.10: remove empty href=""
}
if (!$left && is_customize_preview()) {
$hide = ' ' . aweaver_getopt('m_primary_hide_left');
$left = '';
}
if ( $right ) {
$hide = aweaver_getopt('m_primary_hide_right');
$right = '';
}
if (!$right && is_customize_preview()){
$hide = aweaver_getopt('m_primary_hide_right');
$right = '';
}
if ( aweaver_getopt( 'm_primary_search' ) ) {
$right = '' . $right;
}
if ( $menu )
$menu = $left . $site_title . $right . '';
// add the styling classes here
$menu = '\n";
if ( $args['echo'] )
echo $menu;
else
return $menu;
}
//--
// ------ smart menus ------
function aweaver_smartmenu( $menu_id, $menu_opt ) {
$def = "{subIndicatorsText:'',subMenusMinWidth:'1em',subMenusMaxWidth:'25em'}";
// build jQuery script to invoke menu
?>
>> FILTER: aweaver_get_custom_logo <<< ================================
add_filter( 'get_custom_logo', 'aweaver_get_custom_logo', 10, 2 );
function aweaver_get_custom_logo( $html, $notused ) {
// I think WP has the itemprop='logo' wrong since it applies ONLY to images.
return str_replace(' itemprop="logo"', '', $html);
}
// =============================== >>> FILTER: aweaver_body_classes <<< ================================
add_filter( 'body_class', 'aweaver_body_classes' );
/*
* Add classes to body depending of page type to make sidebar templates work and full widths work.
*
*/
function aweaver_body_classes( $classes ) {
$pwp = in_array('page-template-paget-posts-php',$classes);
$has_posts = false;
if ( $pwp ) { // page with posts - add stuff like blog
$classes[] = 'blog';
$has_posts = true;
}
if ( ! is_multi_author() )
$classes[] = 'single-author';
if ( is_singular() && ! is_home() && !$pwp ) { // don't make pwp singular
$classes[] = 'singular';
}
if (!is_user_logged_in())
$classes[] = 'not-logged-in';
// these classes get removed by JS at runtime
$classes[] = 'weaverx-theme-body wvrx-not-safari is-menu-desktop is-menu-default'; // Changed 3.1.11 to handle Safari extended width bug
$wide = aweaver_getopt( 'site_layout' );
if ( $wide )
$classes[] = "wvrx-wide-{$wide}";
if ( isset( $GLOBALS['aweaver_page_who'] ) && isset( $GLOBALS['aweaver_page_is_archive'] ) ) { // Changed: 3.1.10 - check if archive is set
if ( $GLOBALS['aweaver_page_is_archive'] ) {
$sb_layout = aweaver_sb_layout_archive( $GLOBALS['aweaver_page_who'] );
if ( $GLOBALS['aweaver_page_who'] != '404' )
$has_posts = true;
}
else
$sb_layout = aweaver_sb_layout( $GLOBALS['aweaver_page_who'] );
$classes[] = 'weaverx-page-' . $GLOBALS['aweaver_page_who'];
$GLOBALS['aweaver_sb_layout'] = $sb_layout;
$classes[] = 'weaverx-sb-' . $sb_layout;
if ( $sb_layout != 'one-column' ) {
$classes[] = 'weaverx-has-sb';
}
if ( $has_posts || $GLOBALS['aweaver_page_who'] == 'single' || $GLOBALS['aweaver_page_who'] == 'blog')
$classes[] = 'has-posts';
}
return $classes;
}
//--
// =============================== >>> FILTER: aweaver_comment_form_defaults <<< ================================
add_filter('comment_form_defaults', 'aweaver_comment_form_defaults',10,1);
function aweaver_comment_form_defaults( $defaults ) { // filter definition
$defaults['title_reply'] = apply_filters('aweaver_leave_reply_form', $defaults['title_reply'] );
$defaults['cancel_reply_link'] = apply_filters('aweaver_cancel_reply_form',$defaults['cancel_reply_link']);
$defaults['label_submit'] = apply_filters('aweaver_post_comment_form',$defaults['label_submit']);
return $defaults;
}
//--
// =============================== >>> FILTER: default_hidden_meta_boxes <<< ================================
// Change what's hidden by default - show Custom Fields and Discussion by default!
add_filter('default_hidden_meta_boxes', 'aweaver_hidden_meta_boxes', 10, 2);
function aweaver_hidden_meta_boxes($hidden, $screen) { // filter definition
if ( 'post' == $screen->base || 'page' == $screen->base )
$hidden = array('slugdiv', 'trackbacksdiv', 'postexcerpt', 'commentsdiv', 'authordiv', 'revisionsdiv');
// removed 'postcustom', 'commentstatusdiv',
return $hidden;
}
//--
// =============================== >>> FILTER: excerpt_length <<< ================================
add_filter( 'excerpt_length', 'aweaver_excerpt_length' );
function aweaver_excerpt_length( $length ) {
/**
* Sets the post excerpt length to 40 words.
*
* To override this length in a child theme, remove the filter and add your own
* function tied to the excerpt_length filter hook.
*/
$val = aweaver_t_get('excerpt_length');
if (!$val)
$val = aweaver_getopt('excerpt_length');
if ($val > 0 || $val === '0')
return $val;
return 40;
}
//--
// =============================== >>> FILTER: header_video_settings <<< ================================
if (!function_exists('aweaver_video_controls')) :
add_filter( 'header_video_settings', 'aweaver_video_controls' );
/**
* Customize video play/pause button in the custom header.
*/
function aweaver_video_controls( $settings ) {
// modify the video parameters
$settings['l10n']['play'] = '' . __( 'Play background video', 'absolute-weaver' ) . '' ;
$settings['l10n']['pause'] = '' . __( 'Pause background video', 'absolute-weaver' ) . '' ;
$ratio = aweaver_getopt_default('header_video_aspect', '16:9');
$ratio = explode( ':', $ratio);
$settings['width'] = $ratio[0]; $settings['height'] = $ratio[1];
$settings['minWidth'] = 800;
$hdr_bg = aweaver_fi( 'page', 'header-image' );
if ( $hdr_bg ) {
$settings['posterUrl'] = esc_url($hdr_bg); // supply the FI image url
}
return $settings;
}
endif;
//--
function aweaver_get_video_render() {
$render = aweaver_getopt_default('header_video_render','has-header-video');
return $render;
}
function aweaver_has_header_video() {
return aweaver_get_video_render() != 'has-header-video-none'
&& (has_header_video()) ;
}
// =============================== >>> FILTER: aweaver_mce_css <<< ================================
add_filter('mce_css','aweaver_mce_css_filter');
/* route tinyMCE to our stylesheet */
function aweaver_mce_css_filter( $default_style ) {
/* replace the default editor-style.css with custom CSS generated on the fly by the php version */
if (aweaver_getopt('_hide_editor_style'))
return $default_style;
$style_file = apply_filters( 'aweaver_mce_css', $default_style ); // theme support plugin builds a css file
if ( $style_file != $default_style )
return $style_file;
//$mce_css_file = trailingslashit(get_template_directory()) . 'editor-style-css.php';
//$mce_css_dir = trailingslashit(get_template_directory_uri()) . 'editor-style-css.php';
//if (!@file_exists($mce_css_file)) { // see if it is there
// return $default_style;
//}
return $default_style;
/* do we need to do anything about rtl? */
/* on-the-fly CSS removed Version 4.0 */
}
//--
// =============================== >>> ACTION: aweaver_enqueue_gutenberg_style <<< ================================
/**
* Action: Enqueue style sheets and fonts for Gutenberg Editor only.
*
* @since 4.0
*
*/
function aweaver_enqueue_gutenberg_block_editor_assets() {
// add our element styles to gutenberg. enqueues for editor only
if (aweaver_getopt('_hide_editor_style'))
return;
aweaver_check_editor_style(); // see if we need an update...
$editor_file = get_template_directory_uri() . '/assets/css/blocks-editor-base-style'.ABSOLUTE_WVR_MINIFY.'.css';
// enqueue style file
wp_enqueue_style( 'aweaver_gutenberg_fonts', ABSOLUTE_WVR_GOOGLE_FONTS_URL); // load the Google Fonts the theme uses so they are avilable to the editor
wp_enqueue_style( 'aweaver_blocks_base_style', $editor_file, array(), ABSOLUTE_WVR_VERSION);
$updir = wp_upload_dir();
$css_file = trailingslashit($updir['basedir']) . 'absolute-wvr-css/block-editor-style-awvr.css'; // generated CSS files won't be minified
$css_path = trailingslashit($updir['baseurl']) . 'absolute-wvr-css/block-editor-style-awvr.css';
if ( aweaver_f_exists( $css_file ) ) { // add dynamically generated editor CSS if the file exists
$path = str_replace(array('http:','https:'), '', $css_path); // strip the http: if there, just use the //
wp_enqueue_style( 'aweaver_gutenberg_awvr_style', $css_path, array(), ABSOLUTE_WVR_VERSION); // fixup CSS for current theme settings
}
}
add_action( 'enqueue_block_editor_assets', 'aweaver_enqueue_gutenberg_block_editor_assets' ); // Gutenberg invokes this action
/**
* Action: Enqueue style sheets for Gutenberg Editor and Front end.
*
* @since 4.0
*
*/
function aweaver_enqueue_gutenberg_block_assets() {
// enqueue for BOTH editor and front-end
$style_file = get_template_directory_uri() . '/assets/css/blocks-theme-blocks'.ABSOLUTE_WVR_MINIFY.'.css';
wp_enqueue_style( 'aweaver_blocks_block', $style_file, array(),ABSOLUTE_WVR_VERSION );
}
//#@@@ add_action( 'enqueue_block_assets', 'aweaver_enqueue_gutenberg_block_assets' ); // Gutenberg invokes this action
// =============================== >>> FILTER: aweaver_replace_widget_area <<< ================================
add_filter('aweaver_replace_widget_area', 'aweaver_replace_widget_area_filter');
function aweaver_replace_widget_area_filter( $area_name ) {
// If a replacement widget area has been specified, then use it instead.
$replace = aweaver_get_per_page_value( '_' . $area_name );
if ( $replace ) { // see if the replacement widget area actually exists...
if ( ! is_active_sidebar( $replace ) ) {
?>
Main Options → Sidebars & Layout tab, or you may need to add
widgets to the area.', 'absolute-weaver' /*adm*/); ?>
>> PAGE BUILDERS <<<==============================================
// Page Builder Filters - used to filter stuff for the header
// apply_filters('aweaver_replace_footer_area', 'keep_footer') == 'keep_footer' )
// echo apply_filters('aweaver_page_builder_content', $post_id, 'footer-html', $c_class);
function aweaver_page_builder_content_filter( $post_id, $where = 'pb-content', $class = '' ) {
// return sprintf(__('Oops! Post ID does not exist...: %s
', 'absolute-weaver'), $post_id);
$post_id = (int) $post_id;
if (! is_string( get_post_status( $post_id ) ) ) {
return sprintf(__('Oops! Post ID does not exist: %s
', 'absolute-weaver'), $post_id);
}
$out = '';
// this code is independent of page builder - will display correctly becaus using the_content
$id = ($where) ? " id='{$where}'" : '';
$out .= "\n";
// okay, gotta fetch the_post for this post so that it will be properly intercepted by the page builder
$args = array(
'p' => $post_id, // ID of a page, post, or custom type
'post_type' => 'any'
);
$use_posts = new WP_Query($args);
while ( $use_posts->have_posts() ) {
$use_posts->the_post();
$out .= '
';
$out .= apply_filters('the_content', get_the_content());
$out .= "
\n";
}
wp_reset_query(); // undo our WP_Query
wp_reset_postdata();
$out .= "
\n";
return $out;
/* if ( $postid ) {
$extra = '' . get_post_field('post_content', $postid) . '';
$c_class .= ' wvrx-header-html-has-post';
} */
}
add_filter('aweaver_page_builder_content', 'aweaver_page_builder_content_filter', 10, 3);
function aweaver_replace_pb_area_filter( $area ) {
//if have echoed content successfully, otherwise, return $area
//return $area; // default - no replacement
$use_id = aweaver_area_replacement_id( $area );
if ( $use_id == 'none' ) // no replacement area defined
return $area;
$before = '';
$after = '';
if ( $area == 'header' ) {
$before = ' \n";
}
switch ( $area ) {
case 'header':
$title = apply_filters('aweaver_site_title', esc_html(get_bloginfo( 'name', 'display' ) ) );
$before .= "
{$title}
";
$hide_menus = false;
if (aweaver_get_per_page_value('_pp_pb_header_hide_menus') == 'show')
$hide_menus = false;
else if ( aweaver_get_per_page_value('_pp_pb_header_hide_menus') == 'hide' || aweaver_getopt( 'pb_header_hide_menus' ) )
$hide_menus = true;
if ( ! $hide_menus )
do_action('aweaver_nav', 'top'); // ======== TOP MENU
echo $before;
echo aweaver_page_builder_content_filter($use_id, $area );
echo $after;
if ( ! $hide_menus )
do_action('aweaver_nav', 'bottom'); // ======== BOTTOM MENU
break;
case 'footer':
echo $before;
echo aweaver_page_builder_content_filter($use_id, $area );
echo $after;
break;
default:
return $area; // return name in if not legal
}
return 'displayed'; // different than $area in
}
add_filter('aweaver_replace_pb_area', 'aweaver_replace_pb_area_filter');
function aweaver_area_replacement_id ( $area ) {
// build a value for a pabe builder header/footer replacement page/post
// per page first...
// 'pb_header_replace_page_id' and 'pb_footer_replace_page_id' have 1st priority
// 'elementor_header_replacement' and 'elementor_footer_replacement' are 2nd
// 'siteorigin_header_replacement' and 'siteorigin_footer_replacement' are 3rd
// return 'none' if none are set
$use_id = aweaver_get_per_page_value( "_pp_pb_{$area}_replace_page_id" );
if ( !$use_id || $use_id == 'none')
$use_id = aweaver_get_per_page_value( "_pp_elementor_{$area}_replacement" );
if ( !$use_id || $use_id == 'none')
$use_id = aweaver_get_per_page_value( "_pp_siteorigin_{$area}_replacement" );
if ( !$use_id || $use_id == 'none')
$use_id = aweaver_getopt( "pb_{$area}_replace_page_id" );
if ( !$use_id || $use_id == 'none')
$use_id = aweaver_getopt( "elementor_{$area}_replacement" );
if ( !$use_id || $use_id == 'none')
$use_id = aweaver_getopt( "siteorigin_{$area}_replacement" );
if ( !$use_id || $use_id == 'none')
return 'none';
return $use_id;
}
?>