/** * Tweak menu walker to support selective refresh. * * @param array $args List of arguments for navigation. * * @return mixed */ public function nav_walker( $args ) { if ( isset( $args['walker'] ) && is_string( $args['walker'] ) && class_exists( $args['walker'] ) ) { $args['walker'] = new $args['walker'](); } return $args; } /** * Enqueue scripts and styles. */ public function enqueue_scripts() { $this->add_styles(); $this->add_inline_styles(); $this->add_scripts(); } /** * Enqueue inline styles for core components. */ private function add_inline_styles() { // Add Inline styles if buttons shadows are being used. $primary_values = get_theme_mod( Config::MODS_BUTTON_PRIMARY_STYLE, neve_get_button_appearance_default() ); $secondary_values = get_theme_mod( Config::MODS_BUTTON_SECONDARY_STYLE, neve_get_button_appearance_default( 'secondary' ) ); $style = ''; if ( ( isset( $primary_values['useShadow'] ) && ! empty( $primary_values['useShadow'] ) ) || ( isset( $primary_values['useShadowHover'] ) && ! empty( $primary_values['useShadowHover'] ) ) || ( isset( $secondary_values['useShadow'] ) && ! empty( $secondary_values['useShadow'] ) ) || ( isset( $secondary_values['useShadowHover'] ) && ! empty( $secondary_values['useShadowHover'] ) ) ) { $style .= '.button.button-primary, .is-style-primary .wp-block-button__link {box-shadow: var(--primarybtnshadow, none);} .button.button-primary:hover, .is-style-primary .wp-block-button__link:hover {box-shadow: var(--primarybtnhovershadow, none);} .button.button-secondary, .is-style-secondary .wp-block-button__link {box-shadow: var(--secondarybtnshadow, none);} .button.button-secondary:hover, .is-style-secondary .wp-block-button__link:hover {box-shadow: var(--secondarybtnhovershadow, none);}'; } foreach ( neve_get_headings_selectors() as $heading_id => $heading_selector ) { $font_family = get_theme_mod( $this->get_mod_key_heading_fontfamily( $heading_id ), '' ); // default value is empty string to be consistent with default customizer control value. $css_var = sprintf( '--%1$sfontfamily', $heading_id ); if ( is_customize_preview() ) { $style .= sprintf( '%s {font-family: var(%s, var(--headingsfontfamily)), var(--nv-fallback-ff);} ', $heading_id, $css_var ); // fallback values for the first page load on the customizer continue; } // If font family is inherit, do not add a style for this heading. if ( $font_family === '' ) { continue; } $style .= sprintf( '%s {font-family: var(%s);}', $heading_id, $css_var ); } $style .= $this->get_mobile_menu_styles(); $style .= $this->get_static_footer_styles(); wp_add_inline_style( 'neve-style', Dynamic_Css::minify_css( $style ) ); } /** * Showing Menu Sidebar animation css. * * @return string */ private function get_mobile_menu_styles() { $sidebar_animation_css = '.is-menu-sidebar .header-menu-sidebar { visibility: visible; }'; $sidebar_animation_css .= '.is-menu-sidebar.menu_sidebar_slide_left .header-menu-sidebar { transform: translate3d(0, 0, 0); left: 0; }'; $sidebar_animation_css .= '.is-menu-sidebar.menu_sidebar_slide_right .header-menu-sidebar { transform: translate3d(0, 0, 0); right: 0; }'; $sidebar_animation_css .= '.is-menu-sidebar.menu_sidebar_pull_right .header-menu-sidebar, .is-menu-sidebar.menu_sidebar_pull_left .header-menu-sidebar { transform: translateX(0); }'; $sidebar_animation_css .= '.is-menu-sidebar.menu_sidebar_dropdown .header-menu-sidebar { height: auto; }'; $sidebar_animation_css .= '.is-menu-sidebar.menu_sidebar_dropdown .header-menu-sidebar-inner { max-height: 400px; padding: 20px 0; }'; $sidebar_animation_css .= '.is-menu-sidebar.menu_sidebar_full_canvas .header-menu-sidebar { opacity: 1; }'; $sidebar_animation_css .= '.header-menu-sidebar .menu-item-nav-search:not(.floating) { pointer-events: none; }'; $sidebar_animation_css .= '.header-menu-sidebar .menu-item-nav-search .is-menu-sidebar { pointer-events: unset; }'; return $sidebar_animation_css; } /** * Get static footer styles. * * @return string */ private function get_static_footer_styles() { if ( defined( 'NEVE_PRO_VERSION' ) ) { return ''; } return '@media screen and (max-width: 960px) { .builder-item.cr .item--inner { --textalign: center; --justify: center; } }'; } /** * Enqueue styles. */ private function add_styles() { if ( class_exists( 'WooCommerce', false ) ) { $style_path = 'css/woocommerce'; wp_register_style( 'neve-woocommerce', NEVE_ASSETS_URL . $style_path . ( ( NEVE_DEBUG ) ? '' : '.min' ) . '.css', array(), apply_filters( 'neve_version_filter', NEVE_VERSION ) ); wp_style_add_data( 'neve-woocommerce', 'rtl', 'replace' ); wp_style_add_data( 'neve-woocommerce', 'suffix', '.min' ); if ( ! Elementor::is_elementor_checkout() ) { wp_enqueue_style( 'neve-woocommerce' ); } } if ( class_exists( 'Easy_Digital_Downloads' ) ) { $style_path = 'css/easy-digital-downloads'; wp_register_style( 'neve-easy-digital-downloads', NEVE_ASSETS_URL . $style_path . ( ( NEVE_DEBUG ) ? '' : '.min' ) . '.css', array(), apply_filters( 'neve_version_filter', NEVE_VERSION ) ); wp_style_add_data( 'neve-easy-digital-downloads', 'rtl', 'replace' ); wp_style_add_data( 'neve-easy-digital-downloads', 'suffix', '.min' ); wp_enqueue_style( 'neve-easy-digital-downloads' ); } $style_path = '/style-main-new'; wp_register_style( 'neve-style', get_template_directory_uri() . $style_path . ( ( NEVE_DEBUG ) ? '' : '.min' ) . '.css', array(), apply_filters( 'neve_version_filter', NEVE_VERSION ) ); wp_style_add_data( 'neve-style', 'rtl', 'replace' ); wp_style_add_data( 'neve-style', 'suffix', '.min' ); wp_enqueue_style( 'neve-style' ); $mm_path = 'mega-menu'; wp_register_style( 'neve-mega-menu', get_template_directory_uri() . '/assets/css/' . $mm_path . ( ( NEVE_DEBUG ) ? '' : '.min' ) . '.css', array(), apply_filters( 'neve_version_filter', NEVE_VERSION ) ); wp_style_add_data( 'neve-mega-menu', 'rtl', 'replace' ); wp_style_add_data( 'neve-mega-menu', 'suffix', '.min' ); } /** * Enqueue scripts. */ private function add_scripts() { if ( neve_is_amp() ) { return; } wp_register_script( 'neve-script', NEVE_ASSETS_URL . 'js/build/modern/frontend.js', apply_filters( 'neve_filter_main_script_dependencies', array() ), NEVE_VERSION, true ); wp_localize_script( 'neve-script', 'NeveProperties', apply_filters( 'neve_filter_main_script_localization', array( 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'isRTL' => is_rtl(), 'isCustomize' => is_customize_preview(), ) ) ); wp_enqueue_script( 'neve-script' ); wp_script_add_data( 'neve-script', 'async', true ); $inline_scripts = apply_filters( 'hfg_component_scripts', '' ); if ( ! empty( $inline_scripts ) ) { wp_add_inline_script( 'neve-script', $inline_scripts ); } if ( class_exists( 'WooCommerce', false ) && is_woocommerce() ) { wp_register_script( 'neve-shop-script', NEVE_ASSETS_URL . 'js/build/modern/shop.js', array(), NEVE_VERSION, true ); wp_enqueue_script( 'neve-shop-script' ); wp_script_add_data( 'neve-shop-script', 'async', true ); } if ( $this->should_load_comments_reply() ) { wp_enqueue_script( 'comment-reply' ); } } /** * Dequeue comments-reply script if comments are closed. * * @return bool */ public function should_load_comments_reply() { if ( ! is_singular() ) { return false; } if ( ! comments_open() ) { return false; } if ( ! (bool) get_option( 'thread_comments' ) ) { return false; } if ( post_password_required() ) { return false; } $post_type = get_post_type(); if ( ! post_type_supports( $post_type, 'comments' ) ) { return false; } if ( ! apply_filters( 'neve_post_has_comments', false ) ) { return false; } return true; } /** * Register widgets for the theme. * * @since 1.0.0 */ public function register_sidebars() { $sidebars = array( 'blog-sidebar' => esc_html__( 'Sidebar', 'neve' ), 'shop-sidebar' => esc_html__( 'Shop Sidebar', 'neve' ), ); $footer_sidebars = apply_filters( 'neve_footer_widget_areas_array', array( 'footer-one-widgets' => esc_html__( 'Footer One', 'neve' ), 'footer-two-widgets' => esc_html__( 'Footer Two', 'neve' ), 'footer-three-widgets' => esc_html__( 'Footer Three', 'neve' ), 'footer-four-widgets' => esc_html__( 'Footer Four', 'neve' ), ) ); $sidebars = array_merge( $sidebars, $footer_sidebars ); foreach ( $sidebars as $sidebar_id => $sidebar_name ) { $sidebar_settings = array( 'name' => $sidebar_name, 'id' => $sidebar_id, 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '

', 'after_title' => '

', ); register_sidebar( $sidebar_settings ); } } /** * Get strings. * * @return array */ public function get_strings() { return [ 'add_item' => __( 'Add item', 'neve' ), 'add_items' => __( 'Add items by clicking the ones below.', 'neve' ), 'all_selected' => __( 'All items are already selected.', 'neve' ), 'page_layout' => __( 'Page Layout', 'neve' ), 'page_title' => __( 'Page Title', 'neve' ), 'upsell_components' => __( 'Upgrade to Neve Pro and unlock all components, including Wish List, Breadcrumbs, Custom Layouts and many more.', 'neve' ), 'header_booster' => esc_html__( 'Header Booster', 'neve' ), 'blog_booster' => esc_html__( 'Blog Booster', 'neve' ), 'woo_booster' => esc_html__( 'WooCommerce Booster', 'neve' ), 'custom_layouts' => esc_html__( 'Custom Layouts', 'neve' ), 'white_label' => esc_html__( 'White Label module', 'neve' ), 'scroll_to_top' => esc_html__( 'Scroll to Top module', 'neve' ), 'elementor_booster' => esc_html__( 'Elementor Booster', 'neve' ), 'ext_h_description' => esc_html__( 'Extend your header with more components and settings, build sticky/transparent headers or display them conditionally.', 'neve' ), 'ctm_h_description' => esc_html__( 'Easily create custom headers and footers as well as adding your own custom code or content in any of the hooks locations.', 'neve' ), 'elem_description' => esc_html__( 'Leverage the true flexibility of Elementor with powerful addons and templates that you can import with just one click.', 'neve' ), 'get_pro_cta' => esc_html__( 'Get the PRO version!', 'neve' ), 'opens_new_tab_des' => esc_html__( '(opens in a new tab)', 'neve' ), 'filter' => __( 'Filter', 'neve' ), /* translators: %s - Theme name */ 'neve_options' => __( '%s Options', 'neve' ), 'migrate_builder_d' => __( 'Migrating builder data', 'neve' ), 'rollback_builder' => __( 'Rolling back builder', 'neve' ), 'remove_old_data' => __( 'Removing old data', 'neve' ), 'customizer_values_notice' => __( 'You must save the current customizer values before running the migration.', 'neve' ), 'wrong_reload_notice' => __( 'Something went wrong. Please reload the page and try again.', 'neve' ), 'rollback_to_old' => __( 'Want to roll back to the old builder?', 'neve' ), 'new_hfg_experience' => __( "We've created a new Header/Footer Builder experience! You can always roll back to the old builder from right here.", 'neve' ), 'manual_adjust' => __( 'Some manual adjustments may be required.', 'neve' ), 'reload' => __( 'Reload', 'neve' ), 'migrate' => __( 'Migrate Builders Data', 'neve' ), 'legacy_skin' => __( 'Legacy Skin', 'neve' ), 'neve_30' => __( 'Neve 3.0', 'neve' ), 'switching_skin' => __( 'Switching skin', 'neve' ), 'switch_skin' => __( 'Switch Skin', 'neve' ), 'dismiss' => __( 'Dismiss', 'neve' ), 'rollback' => __( 'Roll Back', 'neve' ), 'scroll_to_top_desc' => __( 'Add a customizable scroll-to-top button that appears exactly when needed. Style it to match your brand.', 'neve' ), /* translators: %s - Module name for the upsell */ 'upsell' => __( 'Unlock %s with the Pro version.', 'neve' ), ]; } /** * Adds CSS rules to resolve .has-dynamicslug-color .has-dynamicslug-background-color classes. * * @param string $current_styles Current dynamic style. * @param string $context gutenberg|frontend Represents the type of the context. * @return string dynamic styles has resolving global custom colors */ public function css_global_custom_colors( $current_styles, $context ) { if ( $context !== 'frontend' ) { return $current_styles; } foreach ( Mods::get( Config::MODS_GLOBAL_CUSTOM_COLORS, [] ) as $slug => $args ) { $css_var = sprintf( 'var(--%s) !important', $slug ); $current_styles .= Dynamic_CSS::minify_css( sprintf( '.has-%s-color {color:%s} .has-%s-background-color {background-color:%s}', $slug, $css_var, $slug, $css_var ) ); } return $current_styles; } /** * Add module css. * * @param string $css Current CSS style. * @param string $context Current context. * * @return string Altered CSS. */ public function css_scroll_to_top( $css, $context = 'frontend' ) { if ( ! Scroll_To_Top::is_enabled() ) { return $css; } if ( $context !== 'frontend' ) { return $css; } $scroll_to_top_css = '.scroll-to-top {' . ( is_rtl() ? 'left: 20px;' : 'right: 20px;' ) . ' border: none; position: fixed; bottom: 30px; display: none; opacity: 0; visibility: hidden; transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out; align-items: center; justify-content: center; z-index: 999; } @supports (-webkit-overflow-scrolling: touch) { .scroll-to-top { bottom: 74px; } } .scroll-to-top.image { background-position: center; } .scroll-to-top .scroll-to-top-image { width: 100%; height: 100%; } .scroll-to-top .scroll-to-top-label { margin: 0; padding: 5px; } .scroll-to-top:hover { text-decoration: none; } .scroll-to-top.scroll-to-top-left {' . ( is_rtl() ? 'right: 20px; left: unset;' : 'left: 20px; right: unset;' ) . '} .scroll-to-top.scroll-show-mobile { display: flex; } @media (min-width: 960px) { .scroll-to-top { display: flex; } }'; $scroll_to_top_css .= '.scroll-to-top { color: var(--color); padding: var(--padding); border-radius: var(--borderradius); background: var(--bgcolor); } .scroll-to-top:hover, .scroll-to-top:focus { color: var(--hovercolor); background: var(--hoverbgcolor); } .scroll-to-top-icon, .scroll-to-top.image .scroll-to-top-image { width: var(--size); height: var(--size); } .scroll-to-top-image { background-image: var(--bgimage); background-size: cover; }'; return $css . $scroll_to_top_css; } /** * Fix script translations language directory. * * @param string | false $file File path. * @param string $handle Script handle. * @param string $domain Script text domain. * * @return string | false */ public function fix_script_translation_files( $file, $handle, $domain ) { if ( ! $file || $domain !== 'neve' ) { return $file; } if ( is_file( $file ) ) { return $file; } if ( strpos( $file, WP_LANG_DIR . '/plugins' ) !== false ) { $file = str_replace( WP_LANG_DIR . '/plugins', WP_LANG_DIR . '/themes', $file ); } return $file; } } WordPress › Error

There has been a critical error on this website.

Learn more about troubleshooting WordPress.