>> 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 = esc_html__( '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 aweaver_filter_text( $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
// all strings generated internally - safe to not escape
?>
>> 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'] = '' . esc_html__( 'Play background video', 'absolute-weaver' ) . '';
$settings['l10n']['pause'] = '' . esc_html__( '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
do_action( 'aweaver_load_fonts', 'aweaver_gutenberg_fonts' );
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 ) ) {
?>
>> 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 = '' ) {
$post_id = ( int ) $post_id;
if ( ! is_string( get_post_status( $post_id ) ) ) {
// translators: %s is integer id value
return sprintf( esc_html__( ' *** 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;
} elseif ( 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
aweaver_trusted_echo( $before );
aweaver_trusted_echo( aweaver_page_builder_content_filter( $use_id, $area ) );
aweaver_trusted_echo( $after );
if ( ! $hide_menus ) {
do_action( 'aweaver_nav', 'bottom' );
} // ======== BOTTOM MENU
break;
case 'footer':
aweaver_trusted_echo( $before );
aweaver_trusted_echo( aweaver_page_builder_content_filter( $use_id, $area ) );
aweaver_trusted_echo( $after );
break;
default:
return $area; // return name in if not legal area
}
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;
}
?>