/** * The admin settings handler of the plugin. * * Handles saving and validating settings from the admin UI and network admin. * * @since 1.1.0 * @package LiteSpeed */ namespace LiteSpeed; defined( 'WPINC' ) || exit(); /** * Class Admin_Settings * * Saves, sanitizes, and validates LiteSpeed Cache settings. */ class Admin_Settings extends Base { const LOG_TAG = '[Settings]'; const ENROLL = '_settings-enroll'; /** * Save settings (single site). * * Accepts data from $_POST or WP-CLI. * Importers may call the Conf class directly. * * @since 3.0 * * @param array $raw_data Raw data from request/CLI. * @return void */ public function save( $raw_data ) { self::debug( 'saving' ); if ( empty( $raw_data[ self::ENROLL ] ) ) { wp_die( esc_html__( 'No fields', 'litespeed-cache' ) ); } $raw_data = Admin::cleanup_text( $raw_data ); // Convert data to config format. $the_matrix = []; foreach ( array_unique( $raw_data[ self::ENROLL ] ) as $id ) { $child = false; // Drop array format. if ( false !== strpos( $id, '[' ) ) { if ( 0 === strpos( $id, self::O_CDN_MAPPING ) || 0 === strpos( $id, self::O_CRAWLER_COOKIES ) ) { // CDN child | Cookie Crawler settings. $child = substr( $id, strpos( $id, '[' ) + 1, strpos( $id, ']' ) - strpos( $id, '[' ) - 1 ); // Drop ending []; Compatible with xx[0] way from CLI. $id = substr( $id, 0, strpos( $id, '[' ) ); } else { // Drop ending []. $id = substr( $id, 0, strpos( $id, '[' ) ); } } if ( ! array_key_exists( $id, self::$_default_options ) ) { continue; } // Validate $child. if ( self::O_CDN_MAPPING === $id ) { if ( ! in_array( $child, [ self::CDN_MAPPING_URL, self::CDN_MAPPING_INC_IMG, self::CDN_MAPPING_INC_CSS, self::CDN_MAPPING_INC_JS, self::CDN_MAPPING_FILETYPE ], true ) ) { continue; } } if ( self::O_CRAWLER_COOKIES === $id ) { if ( ! in_array( $child, [ self::CRWL_COOKIE_NAME, self::CRWL_COOKIE_VALS ], true ) ) { continue; } } // Pull value from request. if ( $child ) { // []=xxx or [0]=xxx $data = ! empty( $raw_data[ $id ][ $child ] ) ? $raw_data[ $id ][ $child ] : $this->type_casting(false, $id); } else { $data = ! empty( $raw_data[ $id ] ) ? $raw_data[ $id ] : $this->type_casting(false, $id); } // Sanitize/normalize complex fields. if ( self::O_CDN_MAPPING === $id || self::O_CRAWLER_COOKIES === $id ) { // Use existing queued data if available (only when $child != false). $data2 = array_key_exists( $id, $the_matrix ) ? $the_matrix[ $id ] : ( defined( 'WP_CLI' ) && WP_CLI ? $this->conf( $id ) : [] ); } switch ( $id ) { // Don't allow Editor/admin to be used in crawler role simulator. case self::O_CRAWLER_ROLES: $data = Utility::sanitize_lines( $data ); if ( $data ) { foreach ( $data as $k => $v ) { if ( user_can( $v, 'edit_posts' ) ) { /* translators: %s: user id in tags */ $msg = sprintf( esc_html__( 'The user with id %s has editor access, which is not allowed for the role simulator.', 'litespeed-cache' ), '' . esc_html( $v ) . '' ); Admin_Display::error( $msg ); unset( $data[ $k ] ); } } } break; case self::O_CDN_MAPPING: /** * CDN setting * * Raw data format: * cdn-mapping[url][] = 'xxx' * cdn-mapping[url][2] = 'xxx2' * cdn-mapping[inc_js][] = 1 * * Final format: * cdn-mapping[0][url] = 'xxx' * cdn-mapping[2][url] = 'xxx2' */ if ( $data ) { foreach ( $data as $k => $v ) { if ( self::CDN_MAPPING_FILETYPE === $child ) { $v = Utility::sanitize_lines( $v ); } if ( self::CDN_MAPPING_URL === $child ) { // If not a valid URL, turn off CDN. if ( 0 !== strpos( $v, 'https://' ) ) { self::debug( '❌ CDN mapping set to OFF due to invalid URL' ); $the_matrix[ self::O_CDN ] = false; } $v = trailingslashit( $v ); } if ( in_array( $child, [ self::CDN_MAPPING_INC_IMG, self::CDN_MAPPING_INC_CSS, self::CDN_MAPPING_INC_JS ], true ) ) { // Because these can't be auto detected in `config->update()`, need to format here. $v = 'false' === $v ? 0 : (bool) $v; } if ( empty( $data2[ $k ] ) ) { $data2[ $k ] = []; } $data2[ $k ][ $child ] = $v; } } $data = $data2; break; case self::O_CRAWLER_COOKIES: /** * Cookie Crawler setting * Raw Format: * crawler-cookies[name][] = xxx * crawler-cookies[name][2] = xxx2 * crawler-cookies[vals][] = xxx * * Final format: * crawler-cookie[0][name] = 'xxx' * crawler-cookie[0][vals] = 'xxx' * crawler-cookie[2][name] = 'xxx2' * * Empty line for `vals` uses literal `_null`. */ if ( $data ) { foreach ( $data as $k => $v ) { if ( self::CRWL_COOKIE_VALS === $child ) { $v = Utility::sanitize_lines( $v ); } if ( empty( $data2[ $k ] ) ) { $data2[ $k ] = []; } $data2[ $k ][ $child ] = $v; } } $data = $data2; break; // Cache exclude category. case self::O_CACHE_EXC_CAT: $data2 = []; $data = Utility::sanitize_lines( $data ); foreach ( $data as $v ) { $cat_id = get_cat_ID( $v ); if ( ! $cat_id ) { continue; } $data2[] = $cat_id; } $data = $data2; break; // Cache exclude tag. case self::O_CACHE_EXC_TAG: $data2 = []; $data = Utility::sanitize_lines( $data ); foreach ( $data as $v ) { $term = get_term_by( 'name', $v, 'post_tag' ); if ( ! $term ) { // Could surface an admin error here if desired. continue; } $data2[] = $term->term_id; } $data = $data2; break; case self::O_IMG_OPTM_SIZES_SKIPPED: // Skip image sizes $image_sizes = Utility::prepare_image_sizes_array(); $saved_sizes = isset( $raw_data[$id] ) ? $raw_data[$id] : []; $data = array_diff( $image_sizes, $saved_sizes ); break; default: break; } $the_matrix[ $id ] = $data; } // Special handler for CDN/Crawler 2d list to drop empty rows. foreach ( $the_matrix as $id => $data ) { /** * Format: * cdn-mapping[0][url] = 'xxx' * cdn-mapping[2][url] = 'xxx2' * crawler-cookie[0][name] = 'xxx' * crawler-cookie[0][vals] = 'xxx' * crawler-cookie[2][name] = 'xxx2' */ if ( self::O_CDN_MAPPING === $id || self::O_CRAWLER_COOKIES === $id ) { // Drop row if all children are empty. foreach ( $data as $k => $v ) { foreach ( $v as $v2 ) { if ( $v2 ) { continue 2; } } // All empty. unset( $the_matrix[ $id ][ $k ] ); } } // Don't allow repeated cookie names. if ( self::O_CRAWLER_COOKIES === $id ) { $existed = []; foreach ( $the_matrix[ $id ] as $k => $v ) { if ( empty( $v[ self::CRWL_COOKIE_NAME ] ) || in_array( $v[ self::CRWL_COOKIE_NAME ], $existed, true ) ) { // Filter repeated or empty name. unset( $the_matrix[ $id ][ $k ] ); continue; } $existed[] = $v[ self::CRWL_COOKIE_NAME ]; } } // tmp fix the 3rd part woo update hook issue when enabling vary cookie. if ( 'wc_cart_vary' === $id ) { if ( $data ) { add_filter( 'litespeed_vary_cookies', function ( $arr ) { $arr[] = 'woocommerce_cart_hash'; return array_unique( $arr ); } ); } else { add_filter( 'litespeed_vary_cookies', function ( $arr ) { $key = array_search( 'woocommerce_cart_hash', $arr, true ); if ( false !== $key ) { unset( $arr[ $key ] ); } return array_unique( $arr ); } ); } } } // id validation will be inside. $this->cls( 'Conf' )->update_confs( $the_matrix ); $msg = __( 'Options saved.', 'litespeed-cache' ); Admin_Display::success( $msg ); } /** * Parses any changes made by the network admin on the network settings. * * @since 3.0 * * @param array $raw_data Raw data from request/CLI. * @return void */ public function network_save( $raw_data ) { self::debug( 'network saving' ); if ( empty( $raw_data[ self::ENROLL ] ) ) { wp_die( esc_html__( 'No fields', 'litespeed-cache' ) ); } $raw_data = Admin::cleanup_text( $raw_data ); foreach ( array_unique( $raw_data[ self::ENROLL ] ) as $id ) { // Append current field to setting save. if ( ! array_key_exists( $id, self::$_default_site_options ) ) { continue; } $data = ! empty( $raw_data[ $id ] ) ? $raw_data[ $id ] : false; // id validation will be inside. $this->cls( 'Conf' )->network_update( $id, $data ); } // Update related files. Activation::cls()->update_files(); $msg = __( 'Options saved.', 'litespeed-cache' ); Admin_Display::success( $msg ); } /** * Hooked to the wp_redirect filter when saving widgets fails validation. * * @since 1.1.3 * * @param string $location The redirect location. * @return string Updated location string. */ public static function widget_save_err( $location ) { return str_replace( '?message=0', '?error=0', $location ); } /** * Validate the LiteSpeed Cache settings on widget save. * * @since 1.1.3 * * @param array $instance The new settings. * @param array $new_instance The raw submitted settings. * @param array $old_instance The original settings. * @param \WP_Widget $widget The widget instance. * @return array|false Updated settings on success, false on error. */ public static function validate_widget_save( $instance, $new_instance, $old_instance, $widget ) { if ( empty( $new_instance ) ) { return $instance; } if ( ! isset( $new_instance[ ESI::WIDGET_O_ESIENABLE ], $new_instance[ ESI::WIDGET_O_TTL ] ) ) { return $instance; } $esi = (int) $new_instance[ ESI::WIDGET_O_ESIENABLE ] % 3; $ttl = (int) $new_instance[ ESI::WIDGET_O_TTL ]; if ( 0 !== $ttl && $ttl < 30 ) { add_filter( 'wp_redirect', __CLASS__ . '::widget_save_err' ); return false; // Invalid ttl. } if ( empty( $instance[ Conf::OPTION_NAME ] ) ) { // @todo to be removed. $instance[ Conf::OPTION_NAME ] = []; } $instance[ Conf::OPTION_NAME ][ ESI::WIDGET_O_ESIENABLE ] = $esi; $instance[ Conf::OPTION_NAME ][ ESI::WIDGET_O_TTL ] = $ttl; $current = ! empty( $old_instance[ Conf::OPTION_NAME ] ) ? $old_instance[ Conf::OPTION_NAME ] : false; // Avoid unsanitized superglobal usage. $referrer = isset( $_SERVER['HTTP_REFERER'] ) ? esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) : ''; // Only purge when not in the Customizer. if ( false === strpos( $referrer, '/wp-admin/customize.php' ) ) { if ( ! $current || $esi !== (int) $current[ ESI::WIDGET_O_ESIENABLE ] ) { Purge::purge_all( 'Widget ESI_enable changed' ); } elseif ( 0 !== $ttl && $ttl !== (int) $current[ ESI::WIDGET_O_TTL ] ) { Purge::add( Tag::TYPE_WIDGET . $widget->id ); } Purge::purge_all( 'Widget saved' ); } return $instance; } } { "translation-revision-date": "2026-05-28T20:57:38+00:00", "generator": "WP-CLI\/2.12.0", "source": "build\/3.1.0\/index.js", "domain": "messages", "locale_data": { "messages": { "": { "domain": "messages", "lang": "it_IT", "plural-forms": "nplurals=2; plural=(n != 1);" }, "HostGator": [ "" ], "Home": [ "" ], "Settings": [ "" ], "Not Live": [ "" ], "Live": [ "" ], "Your website is currently displaying a \"Coming Soon\" page.": [ "" ], "Editor": [ "" ], "Hosting Panel": [ "" ], "Oh No, An Error!": [ "" ], "You found an error, please refresh the page and try again!": [ "" ], "If the error persists, please contact support.": [ "" ], "Error code:": [ "" ], "HostGator WordPress Plugin": [ "" ], "Phone": [ "" ], "Give us a ring at (866) 96-GATOR": [ "" ], "Call Us": [ "" ], "Chat": [ "" ], "Have a question? We're here 24\/7\/365": [ "" ], "Live Chat": [ "" ], "Tweet": [ "" ], "Tweet us at @hgsupport for support": [ "" ], "Tweet Us": [ "" ], "Knowledge Base": [ "" ], "Know what the pros know.": [ "" ], "Find Answers": [ "" ], "Blog": [ "" ], "Get our tips and in-depth articles.": [ "" ], "Learn Stuff": [ "" ], "Video Tutorials": [ "" ], "Step-by-step tutorials and additional guides.": [ "" ], "Watch Now": [ "" ], "There's nothing here!": [ "" ], "Manage WordPress": [ "" ], "Staging": [ "" ], "Performance": [ "" ], "Commerce": [ "" ], "Marketplace": [ "" ], "Help": [ "" ], "Admin": [ "" ], "Secret page to manage admin features and settings.": [ "" ], "Premium tools available in eCommerce Add-Ons": [ "" ], "Discover exclusive features, designed to deliver unmatched value and elevate your online experience.": [ "" ], "We are available 24\/7 to help answer questions and solve your problems.": [ "" ], "Welcome to HostGator": [ "" ], "We're very excited to get started with you!": [ "" ], "Quick Links": [ "" ], "Settings and Performance": [ "" ], "Customize & fine-tune your site.": [ "" ], "Manage Settings": [ "" ], "Manage your site settings. You can adjust automatic updates, comments, revisions and more.": [ "" ], "Manage site performance and caching settings as well as clear the site cache.": [ "" ], "Visit Marketplace": [ "" ], "Add site services, themes or plugins from the marketplace.": [ "" ], "Website Content": [ "" ], "Create, manage & sort your story.": [ "" ], "New Post": [ "" ], "Write a new blog post.": [ "" ], "Pages": [ "" ], "New Page": [ "" ], "Add fresh pages to your website.": [ "" ], "Categories": [ "" ], "Manage Categories": [ "" ], "Organize existing content into categories.": [ "" ], "Web Hosting": [ "" ], "Access & manage your HostGator account.": [ "" ], "Manage Sites": [ "" ], "Manage your site from the control panel. You can create backups, set security, and improve performance.": [ "" ], "Email": [ "" ], "Manage Email": [ "" ], "Create email accounts, compose, send, and receive your email from the control panel.": [ "" ], "Domains": [ "" ], "Manage Domain": [ "" ], "Find a Domain": [ "" ], "Find a new domain and assign it to your site or start a new site with a fresh domain.": [ "" ], "Get Help": [ "" ], "24\/7\/365 support. We work when you work.": [ "" ], "Explore our featured collection of tools and services.": [ "" ], "Oops, there was an error loading the marketplace, please try again later.": [ "" ], "Sorry, no marketplace items. Please, try again later.": [ "" ], "Load More": [ "" ], "Oops! Something Went Wrong": [ "" ], "An error occurred while loading the content. Please try again later.": [ "" ], "Manage All Updates": [ "" ], "WordPress Core": [ "" ], "Plugins": [ "" ], "Themes": [ "" ], "Automatic Updates": [ "" ], "Keeping automatic updates on ensures timely security fixes and the latest features.": [ "" ], "Oops! Something went wrong. Please try again.": [ "" ], "Coming soon activated": [ "" ], "Coming soon deactivated": [ "" ], "Coming soon page is active. Site requires login.": [ "" ], "Coming soon page is not active. Site is live to visitors.": [ "" ], "Site Status": [ "" ], "Turn off your \"Coming Soon\" page when you are ready to launch your website.": [ "" ], "Turn on your \"Coming Soon\" page when you need to make major changes to your website.": [ "" ], "Coming Soon page": [ "" ], "Your Hostgator Coming Soon page lets you hide your site from visitors while you make the magic happen.": [ "" ], "Disabled old post comments": [ "" ], "Enabled old post comments": [ "" ], "Comments on old posts are disabled.": [ "" ], "Comments are allowed on old posts.": [ "" ], "Disable comments for older posts": [ "" ], "Comments setting saved": [ "" ], "Comments on posts are disabled after %s day.": [ "" ], "Close comments after %s day.": [ "" ], "Comments setting saved.": [ "" ], "Posts will display %s comment at a time.": [ "" ], "Display %s comments per page.": [ "" ], "Comments": [ "" ], "Comments allow visitors to provide feedback and respond to your posts or pages.": [ "" ], "Post revision setting saved": [ "" ], "Posts will save %s revision.": [ "" ], "Number of revisions posts can save": [ "" ], "Saving drafts and updating published content creates revisions. Make changes with confidence, knowing you can take %s step back.": [ "" ], "Trash setting saved": [ "" ], "The trash will automatically empty every %s week.": [ "" ], "Trash emptying frequency": [ "" ], "Content Options": [ "" ], "Controls for content revisions and how often to empty the trash.": [ "" ], "The Help Center provides guided, step-by-step assistance as you build your site.": [ "" ], "Sorry, that is not allowed.": [ "" ], "This feature cannot currently be modified.": [ "" ], "Optimize your website my managing cache, security and performance settings.": [ "" ], "Optimize your website by managing cache and performance settings": [ "" ], "General Settings": [ "" ], "This is where you can manage common settings for your website.": [ "" ], "Features": [ "" ], "Customize the available features as you manage your website.": [ "" ], "A staging site is a duplicate of your live site, offering a secure environment to experiment, test updates, and deploy when ready.": [ "" ], "The performance feature provides improvements to loads faster for visitors including cache settings.": [ "" ], "The staging feature provides a way to copy a site to test new updates, features or content.": [ "" ], "WonderBlocks provides a library of customizable block patterns and page templates.": [ "" ], "Site Editor": [ "" ], "Customizer": [ "" ] } } } /** * Inline On Mobile - Dynamic CSS. * * @package astra * @since 3.5.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } add_filter( 'astra_dynamic_theme_css', 'astra_inline_on_mobile_css' ); /** * Inline On Mobile - Dynamic CSS. * * @param string $dynamic_css Dynamic CSS. * @since 3.5.0 * @return string */ function astra_inline_on_mobile_css( $dynamic_css ) { $inline_on_mobile_enable = false; for ( $index = 1; $index <= Astra_Builder_Helper::$component_limit; $index++ ) { if ( false === astra_get_option( 'header-menu' . $index . '-menu-stack-on-mobile' ) ) { $inline_on_mobile_enable = true; break; } } if ( false === $inline_on_mobile_enable ) { return $dynamic_css; } $inline_on_mobile_css = ' .ast-header-break-point .ast-mobile-header-wrap .ast-above-header-wrap .main-header-bar-navigation .inline-on-mobile .menu-item .menu-link, .ast-header-break-point .ast-mobile-header-wrap .ast-main-header-wrap .main-header-bar-navigation .inline-on-mobile .menu-item .menu-link, .ast-header-break-point .ast-mobile-header-wrap .ast-below-header-wrap .main-header-bar-navigation .inline-on-mobile .menu-item .menu-link { border: none; } .ast-header-break-point .ast-mobile-header-wrap .ast-above-header-wrap .main-header-bar-navigation .inline-on-mobile .menu-item-has-children > .ast-menu-toggle::before, .ast-header-break-point .ast-mobile-header-wrap .ast-main-header-wrap .main-header-bar-navigation .inline-on-mobile .menu-item-has-children > .ast-menu-toggle::before, .ast-header-break-point .ast-mobile-header-wrap .ast-below-header-wrap .main-header-bar-navigation .inline-on-mobile .menu-item-has-children > .ast-menu-toggle::before { font-size: .6rem; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile { flex-wrap: unset; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu .menu-link { padding: .1em 1em; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu > .menu-item .ast-menu-toggle::before { transform: rotate(-90deg); } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu > .menu-item.ast-submenu-expanded .ast-menu-toggle::before { transform: rotate(-270deg); } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item > .sub-menu > .menu-item .menu-link:before { content: none; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile { flex-wrap: unset; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu .menu-link { padding: .1em 1em; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu > .menu-item .ast-menu-toggle::before { transform: rotate(-90deg); } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu > .menu-item.ast-submenu-expanded .ast-menu-toggle::before { transform: rotate(-270deg); } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item > .sub-menu > .menu-item .menu-link:before { content: none; } .ast-header-break-point .inline-on-mobile .sub-menu { width: 150px; }'; if ( is_rtl() ) { $inline_on_mobile_css .= ' .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.menu-item-has-children { margin-left: 10px; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu { display: block; position: absolute; left: auto; right: 0; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu .menu-item .ast-menu-toggle { padding: 0; left: 1em; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu > .menu-item > .sub-menu { right: 100%; left: auto; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .ast-menu-toggle { left: -15px; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.menu-item-has-children { margin-left: 10px; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu { display: block; position: absolute; left: auto; right: 0; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu > .menu-item > .sub-menu { right: 100%; left: auto; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .ast-menu-toggle { left: -15px; }'; } else { $inline_on_mobile_css .= ' .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.menu-item-has-children { margin-right: 10px; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu { display: block; position: absolute; right: auto; left: 0; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu .menu-item .ast-menu-toggle { padding: 0; right: 1em; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu > .menu-item > .sub-menu { left: 100%; right: auto; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .ast-menu-toggle { right: -15px; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.menu-item-has-children { margin-right: 10px; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu { display: block; position: absolute; right: auto; left: 0; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .menu-item.ast-submenu-expanded > .sub-menu > .menu-item > .sub-menu { left: 100%; right: auto; } .ast-header-break-point .ast-mobile-header-wrap .ast-flex.inline-on-mobile .ast-menu-toggle { right: -15px; }'; } return $dynamic_css .= Astra_Enqueue_Scripts::trim_css( $inline_on_mobile_css ); } /** * Related Posts Loader for Astra theme. * * @package Astra * @author Brainstorm Force * @copyright Copyright (c) 2021, Brainstorm Force * @link https://www.brainstormforce.com * @since Astra 3.5.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Customizer Initialization * * @since 3.5.0 */ class Astra_Related_Posts_Loader { /** * Constructor * * @since 3.5.0 */ public function __construct() { add_filter( 'astra_theme_defaults', array( $this, 'theme_defaults' ) ); add_action( 'customize_register', array( $this, 'related_posts_customize_register' ), 2 ); // Load Google fonts. add_action( 'astra_get_fonts', array( $this, 'add_fonts' ), 1 ); } /** * Enqueue google fonts. * * @return void */ public function add_fonts() { if ( astra_target_rules_for_related_posts() ) { // Related Posts Section title. $section_title_font_family = astra_get_option( 'related-posts-section-title-font-family' ); $section_title_font_weight = astra_get_option( 'related-posts-section-title-font-weight' ); Astra_Fonts::add_font( $section_title_font_family, $section_title_font_weight ); // Related Posts - Posts title. $post_title_font_family = astra_get_option( 'related-posts-title-font-family' ); $post_title_font_weight = astra_get_option( 'related-posts-title-font-weight' ); Astra_Fonts::add_font( $post_title_font_family, $post_title_font_weight ); // Related Posts - Meta Font. $meta_font_family = astra_get_option( 'related-posts-meta-font-family' ); $meta_font_weight = astra_get_option( 'related-posts-meta-font-weight' ); Astra_Fonts::add_font( $meta_font_family, $meta_font_weight ); // Related Posts - Content Font. $content_font_family = astra_get_option( 'related-posts-content-font-family' ); $content_font_weight = astra_get_option( 'related-posts-content-font-weight' ); Astra_Fonts::add_font( $content_font_family, $content_font_weight ); } } /** * Set Options Default Values * * @param array $defaults Astra options default value array. * @return array */ public function theme_defaults( $defaults ) { /** * Update Astra default color and typography values. To not update directly on existing users site, added backwards. * * @since 4.0.0 */ $apply_new_default_color_typo_values = Astra_Dynamic_CSS::astra_check_default_color_typo(); $astra_options = Astra_Theme_Options::get_astra_options(); $astra_blog_update = Astra_Dynamic_CSS::astra_4_6_0_compatibility(); // Related Posts. $defaults['enable-related-posts'] = false; $defaults['related-posts-title'] = __( 'Related Posts', 'astra' ); $defaults['releted-posts-title-alignment'] = 'left'; $defaults['related-posts-total-count'] = 2; $defaults['enable-related-posts-excerpt'] = false; $defaults['related-posts-box-placement'] = 'default'; $defaults['related-posts-outside-location'] = 'above'; $defaults['related-posts-container-width'] = $astra_blog_update ? '' : 'fallback'; $defaults['related-posts-excerpt-count'] = 25; $defaults['related-posts-based-on'] = 'categories'; $defaults['related-posts-order-by'] = 'date'; $defaults['related-posts-order'] = 'asc'; $defaults['related-posts-grid-responsive'] = array( 'desktop' => '2-equal', 'tablet' => '2-equal', 'mobile' => 'full', ); $defaults['related-posts-structure'] = array( 'featured-image', 'title-meta', ); $defaults['related-posts-tag-style'] = 'none'; $defaults['related-posts-category-style'] = 'none'; $defaults['related-posts-date-format'] = ''; $defaults['related-posts-meta-date-type'] = 'published'; $defaults['related-posts-author-avatar-size'] = ''; $defaults['related-posts-author-avatar'] = false; $defaults['related-posts-author-prefix-label'] = astra_default_strings( 'string-blog-meta-author-by', false ); $defaults['related-posts-image-size'] = ''; $defaults['related-posts-image-custom-scale-width'] = 16; $defaults['related-posts-image-custom-scale-height'] = 9; $defaults['related-posts-image-ratio-pre-scale'] = '16/9'; $defaults['related-posts-image-ratio-type'] = ''; $defaults['related-posts-meta-structure'] = array( 'comments', 'category', 'author', ); // Related Posts - Color styles. $defaults['related-posts-text-color'] = $apply_new_default_color_typo_values ? 'var(--ast-global-color-2)' : ''; $defaults['related-posts-link-color'] = ''; $defaults['related-posts-title-color'] = $apply_new_default_color_typo_values ? 'var(--ast-global-color-2)' : ''; $defaults['related-posts-background-color'] = ''; $defaults['related-posts-meta-color'] = ''; $defaults['related-posts-link-hover-color'] = ''; $defaults['related-posts-meta-link-hover-color'] = ''; // Related Posts - Title typo. $defaults['related-posts-section-title-font-family'] = 'inherit'; $defaults['related-posts-section-title-font-weight'] = 'inherit'; $defaults['related-posts-section-title-text-transform'] = ''; $defaults['related-posts-section-title-line-height'] = $apply_new_default_color_typo_values ? '1.25' : ''; $defaults['related-posts-section-title-font-extras'] = array( 'line-height' => ! isset( $astra_options['related-posts-section-title-font-extras'] ) && isset( $astra_options['related-posts-section-title-line-height'] ) ? $astra_options['related-posts-section-title-line-height'] : '1.6', 'line-height-unit' => 'em', 'letter-spacing' => '', 'letter-spacing-unit' => 'px', 'text-transform' => ! isset( $astra_options['related-posts-section-title-font-extras'] ) && isset( $astra_options['related-posts-section-title-text-transform'] ) ? $astra_options['related-posts-section-title-text-transform'] : '', 'text-decoration' => '', ); $defaults['related-posts-section-title-font-size'] = array( 'desktop' => $apply_new_default_color_typo_values ? '26' : '30', 'tablet' => '', 'mobile' => '', 'desktop-unit' => 'px', 'tablet-unit' => 'px', 'mobile-unit' => 'px', ); // Related Posts - Title typo. $defaults['related-posts-title-font-family'] = 'inherit'; $defaults['related-posts-title-font-weight'] = $apply_new_default_color_typo_values ? '500' : 'inherit'; $defaults['related-posts-title-text-transform'] = ''; $defaults['related-posts-title-line-height'] = '1'; $defaults['related-posts-title-font-size'] = array( 'desktop' => '20', 'tablet' => '', 'mobile' => '', 'desktop-unit' => 'px', 'tablet-unit' => 'px', 'mobile-unit' => 'px', ); $defaults['related-posts-title-font-extras'] = array( 'line-height' => ! isset( $astra_options['related-posts-title-font-extras'] ) && isset( $astra_options['related-posts-title-line-height'] ) ? $astra_options['related-posts-title-line-height'] : ( $astra_blog_update ? '1.5' : '1' ), 'line-height-unit' => 'em', 'letter-spacing' => '', 'letter-spacing-unit' => 'px', 'text-transform' => ! isset( $astra_options['related-posts-title-font-extras'] ) && isset( $astra_options['related-posts-title-text-transform'] ) ? $astra_options['related-posts-title-text-transform'] : '', 'text-decoration' => '', ); // Related Posts - Meta typo. $defaults['related-posts-meta-font-family'] = 'inherit'; $defaults['related-posts-meta-font-weight'] = 'inherit'; $defaults['related-posts-meta-text-transform'] = ''; $defaults['related-posts-meta-line-height'] = ''; $defaults['related-posts-meta-font-size'] = array( 'desktop' => '14', 'tablet' => '', 'mobile' => '', 'desktop-unit' => 'px', 'tablet-unit' => 'px', 'mobile-unit' => 'px', ); $defaults['related-posts-meta-font-extras'] = array( 'line-height' => ! isset( $astra_options['related-posts-meta-font-extras'] ) && isset( $astra_options['related-posts-meta-line-height'] ) ? $astra_options['related-posts-meta-line-height'] : '1.6', 'line-height-unit' => 'em', 'letter-spacing' => '', 'letter-spacing-unit' => 'px', 'text-transform' => ! isset( $astra_options['related-posts-meta-font-extras'] ) && isset( $astra_options['related-posts-meta-text-transform'] ) ? $astra_options['related-posts-meta-text-transform'] : '', 'text-decoration' => '', ); // Related Posts - Content typo. $defaults['related-posts-content-font-family'] = 'inherit'; $defaults['related-posts-content-font-weight'] = 'inherit'; $defaults['related-posts-content-font-extras'] = array( 'line-height' => ! isset( $astra_options['related-posts-content-font-extras'] ) && isset( $astra_options['related-posts-content-line-height'] ) ? $astra_options['related-posts-content-line-height'] : '', 'line-height-unit' => 'em', 'letter-spacing' => '', 'letter-spacing-unit' => 'px', 'text-transform' => ! isset( $astra_options['related-posts-content-font-extras'] ) && isset( $astra_options['related-posts-content-text-transform'] ) ? $astra_options['related-posts-content-text-transform'] : '', 'text-decoration' => '', ); $defaults['related-posts-content-font-size'] = array( 'desktop' => '', 'tablet' => '', 'mobile' => '', 'desktop-unit' => 'px', 'tablet-unit' => 'px', 'mobile-unit' => 'px', ); $defaults['ast-sub-section-related-posts-padding'] = array( 'desktop' => array( 'top' => 2.5, 'right' => 2.5, 'bottom' => 2.5, 'left' => 2.5, ), 'tablet' => array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', ), 'mobile' => array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', ), 'desktop-unit' => 'em', 'tablet-unit' => 'em', 'mobile-unit' => 'em', ); $defaults['ast-sub-section-related-posts-margin'] = array( 'desktop' => array( 'top' => 2, 'right' => '', 'bottom' => '', 'left' => '', ), 'tablet' => array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', ), 'mobile' => array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', ), 'desktop-unit' => 'em', 'tablet-unit' => 'em', 'mobile-unit' => 'em', ); return $defaults; } /** * Add postMessage support for site title and description for the Theme Customizer. * * @param WP_Customize_Manager $wp_customize Theme Customizer object. * * @since 3.5.0 */ public function related_posts_customize_register( $wp_customize ) { /** * Register Config control in Related Posts. */ // @codingStandardsIgnoreStart WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once ASTRA_RELATED_POSTS_DIR . 'customizer/class-astra-related-posts-configs.php'; // @codingStandardsIgnoreEnd WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } /** * Render the Related Posts title for the selective refresh partial. * * @since 3.5.0 */ public function render_related_posts_title() { return astra_get_option( 'related-posts-title' ); } } /** * Kicking this off by creating NEW instace. */ new Astra_Related_Posts_Loader(); /** * Astra Theme Customizer Configuration Builder. * * @package astra-builder * @author Astra * @copyright Copyright (c) 2020, Astra * @link https://wpastra.com/ * @since 3.0.0 */ // No direct access, please. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Register Builder Customizer Configurations. * * @since 3.0.0 */ class Astra_Button_Component_Configs { /** * Register Builder Customizer Configurations. * * @param array $configurations Configurations. * @param string $builder_type Builder Type. * @param string $section Section. * * @since 3.0.0 * @return array $configurations Astra Customizer Configurations with updated configurations. */ public static function register_configuration( $configurations, $builder_type = 'header', $section = 'section-hb-button-' ) { if ( 'footer' === $builder_type ) { $class_obj = Astra_Builder_Footer::get_instance(); $number_of_button = Astra_Builder_Helper::$num_of_footer_button; $component_limit = defined( 'ASTRA_EXT_VER' ) ? Astra_Builder_Helper::$component_limit : Astra_Builder_Helper::$num_of_footer_button; } else { $class_obj = Astra_Builder_Header::get_instance(); $number_of_button = Astra_Builder_Helper::$num_of_header_button; $component_limit = defined( 'ASTRA_EXT_VER' ) ? Astra_Builder_Helper::$component_limit : Astra_Builder_Helper::$num_of_header_button; } $button_config = array(); for ( $index = 1; $index <= $component_limit; $index++ ) { $_section = $section . $index; $_prefix = 'button' . $index; /** * These options are related to Header Section - Button. * Prefix hs represents - Header Section. */ $button_config[] = array( /* * Header Builder section - Button Component Configs. */ array( 'name' => $_section, 'type' => 'section', 'priority' => 50, /* translators: %s Index */ 'title' => ( 1 === $number_of_button ) ? __( 'Button', 'astra' ) : sprintf( __( 'Button %s', 'astra' ), $index ), 'panel' => 'panel-' . $builder_type . '-builder-group', 'clone_index' => $index, 'clone_type' => $builder_type . '-button', ), /** * Option: Header Builder Tabs */ array( 'name' => $_section . '-ast-context-tabs', 'section' => $_section, 'type' => 'control', 'control' => 'ast-builder-header-control', 'priority' => 0, 'description' => '', ), /** * Option: Button Text */ array( 'name' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-text]', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-text' ), 'type' => 'control', 'control' => 'text', 'section' => $_section, 'priority' => 20, 'title' => __( 'Text', 'astra' ), 'transport' => 'postMessage', 'partial' => array( 'selector' => '.ast-' . $builder_type . '-button-' . $index, 'container_inclusive' => false, 'render_callback' => array( $class_obj, 'button_' . $index ), 'fallback_refresh' => false, ), 'context' => Astra_Builder_Helper::$general_tab, ), /** * Option: Button Link */ array( 'name' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-link-option]', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-link-option' ), 'type' => 'control', 'control' => 'ast-link', 'sanitize_callback' => array( 'Astra_Customizer_Sanitizes', 'sanitize_link' ), 'section' => $_section, 'priority' => 30, 'title' => __( 'Link', 'astra' ), 'transport' => 'postMessage', 'partial' => array( 'selector' => '.ast-' . $builder_type . '-button-' . $index, 'container_inclusive' => false, 'render_callback' => array( $class_obj, 'button_' . $index ), ), 'context' => Astra_Builder_Helper::$general_tab, 'divider' => array( 'ast_class' => 'ast-top-section-divider' ), ), /** * Group: Primary Header Button Colors Group */ array( 'name' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-text-color-group]', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-color-group' ), 'type' => 'control', 'control' => 'ast-color-group', 'title' => __( 'Text Color', 'astra' ), 'section' => $_section, 'transport' => 'postMessage', 'priority' => 70, 'context' => Astra_Builder_Helper::$design_tab, 'responsive' => true, 'divider' => array( 'ast_class' => 'ast-section-spacing' ), ), array( 'name' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-background-color-group]', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-color-group' ), 'type' => 'control', 'control' => 'ast-color-group', 'title' => __( 'Background Color', 'astra' ), 'section' => $_section, 'transport' => 'postMessage', 'priority' => 70, 'context' => Astra_Builder_Helper::$design_tab, 'responsive' => true, ), /** * Option: Button Text Color */ array( 'name' => $builder_type . '-' . $_prefix . '-text-color', 'transport' => 'postMessage', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-text-color' ), 'type' => 'sub-control', 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-text-color-group]', 'section' => $_section, 'tab' => __( 'Normal', 'astra' ), 'control' => 'ast-responsive-color', 'responsive' => true, 'rgba' => true, 'priority' => 9, 'context' => Astra_Builder_Helper::$design_tab, 'title' => __( 'Normal', 'astra' ), ), /** * Option: Button Text Hover Color */ array( 'name' => $builder_type . '-' . $_prefix . '-text-h-color', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-text-h-color' ), 'transport' => 'postMessage', 'type' => 'sub-control', 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-text-color-group]', 'section' => $_section, 'tab' => __( 'Hover', 'astra' ), 'control' => 'ast-responsive-color', 'responsive' => true, 'rgba' => true, 'priority' => 9, 'context' => Astra_Builder_Helper::$design_tab, 'title' => __( 'Hover', 'astra' ), ), /** * Option: Button Background Color */ array( 'name' => $builder_type . '-' . $_prefix . '-back-color', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-back-color' ), 'transport' => 'postMessage', 'type' => 'sub-control', 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-background-color-group]', 'section' => $_section, 'tab' => __( 'Normal', 'astra' ), 'control' => 'ast-responsive-color', 'responsive' => true, 'rgba' => true, 'priority' => 10, 'context' => Astra_Builder_Helper::$design_tab, 'title' => __( 'Normal', 'astra' ), ), /** * Option: Button Button Hover Color */ array( 'name' => $builder_type . '-' . $_prefix . '-back-h-color', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-back-h-color' ), 'transport' => 'postMessage', 'type' => 'sub-control', 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-background-color-group]', 'section' => $_section, 'tab' => __( 'Hover', 'astra' ), 'control' => 'ast-responsive-color', 'responsive' => true, 'rgba' => true, 'priority' => 10, 'context' => Astra_Builder_Helper::$design_tab, 'title' => __( 'Hover', 'astra' ), ), array( 'name' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-builder-button-border-colors-group]', 'type' => 'control', 'control' => 'ast-color-group', 'title' => __( 'Border Color', 'astra' ), 'section' => $_section, 'priority' => 70, 'transport' => 'postMessage', 'context' => Astra_Builder_Helper::$design_tab, 'responsive' => true, 'divider' => array( 'ast_class' => 'ast-bottom-divider' ), ), /** * Option: Button Border Color */ array( 'name' => $builder_type . '-' . $_prefix . '-border-color', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-border-color' ), 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-builder-button-border-colors-group]', 'transport' => 'postMessage', 'type' => 'sub-control', 'section' => $_section, 'control' => 'ast-responsive-color', 'responsive' => true, 'rgba' => true, 'priority' => 70, 'context' => Astra_Builder_Helper::$design_tab, 'title' => __( 'Normal', 'astra' ), ), /** * Option: Button Border Hover Color */ array( 'name' => $builder_type . '-' . $_prefix . '-border-h-color', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-border-h-color' ), 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-builder-button-border-colors-group]', 'transport' => 'postMessage', 'type' => 'sub-control', 'section' => $_section, 'control' => 'ast-responsive-color', 'responsive' => true, 'rgba' => true, 'priority' => 70, 'context' => Astra_Builder_Helper::$design_tab, 'title' => __( 'Hover', 'astra' ), ), /** * Option: Button Border Size */ array( 'name' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-border-size]', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-border-size' ), 'type' => 'control', 'section' => $_section, 'control' => 'ast-border', 'transport' => 'postMessage', 'linked_choices' => true, 'priority' => 99, 'title' => __( 'Border Width', 'astra' ), 'context' => Astra_Builder_Helper::$design_tab, 'choices' => array( 'top' => __( 'Top', 'astra' ), 'right' => __( 'Right', 'astra' ), 'bottom' => __( 'Bottom', 'astra' ), 'left' => __( 'Left', 'astra' ), ), 'divider' => array( 'ast_class' => 'ast-top-section-divider' ), ), /** * Option: Button Radius Fields */ array( 'name' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-border-radius-fields]', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-border-radius-fields' ), 'type' => 'control', 'control' => 'ast-responsive-spacing', 'sanitize_callback' => array( 'Astra_Customizer_Sanitizes', 'sanitize_responsive_spacing' ), 'section' => $_section, 'title' => __( 'Border Radius', 'astra' ), 'linked_choices' => true, 'transport' => 'postMessage', 'unit_choices' => array( 'px', 'em', '%' ), 'choices' => array( 'top' => __( 'Top', 'astra' ), 'right' => __( 'Right', 'astra' ), 'bottom' => __( 'Bottom', 'astra' ), 'left' => __( 'Left', 'astra' ), ), 'priority' => 99, 'context' => Astra_Builder_Helper::$design_tab, 'connected' => false, 'divider' => array( 'ast_class' => 'ast-top-section-divider' ), ), /** * Option: Primary Header Button Typography */ array( 'name' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-text-typography]', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-text-typography' ), 'type' => 'control', 'control' => 'ast-settings-group', 'title' => __( 'Font', 'astra' ), 'section' => $_section, 'transport' => 'postMessage', 'context' => Astra_Builder_Helper::$design_tab, 'priority' => 90, ), /** * Option: Primary Header Button Font Family */ array( 'name' => $builder_type . '-' . $_prefix . '-font-family', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-font-family' ), 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-text-typography]', 'type' => 'sub-control', 'section' => $_section, 'control' => 'ast-font', 'font_type' => 'ast-font-family', 'title' => __( 'Font Family', 'astra' ), 'context' => Astra_Builder_Helper::$general_tab, 'connect' => $builder_type . '-' . $_prefix . '-font-weight', 'priority' => 1, 'divider' => array( 'ast_class' => 'ast-sub-bottom-dotted-divider' ), ), /** * Option: Primary Footer Button Font Weight */ array( 'name' => $builder_type . '-' . $_prefix . '-font-weight', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-font-weight' ), 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-text-typography]', 'type' => 'sub-control', 'section' => $_section, 'control' => 'ast-font', 'font_type' => 'ast-font-weight', 'title' => __( 'Font Weight', 'astra' ), 'sanitize_callback' => array( 'Astra_Customizer_Sanitizes', 'sanitize_font_weight' ), 'connect' => $builder_type . '-' . $_prefix . '-font-family', 'priority' => 2, 'context' => Astra_Builder_Helper::$general_tab, 'divider' => array( 'ast_class' => 'ast-sub-bottom-dotted-divider' ), ), /** * Option: Primary Header Button Font Size */ array( 'name' => $builder_type . '-' . $_prefix . '-font-size', 'default' => astra_get_option( $builder_type . '-' . $_prefix . '-font-size' ), 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-text-typography]', 'transport' => 'postMessage', 'title' => __( 'Font Size', 'astra' ), 'type' => 'sub-control', 'section' => $_section, 'control' => 'ast-responsive-slider', 'priority' => 3, 'context' => Astra_Builder_Helper::$general_tab, 'sanitize_callback' => array( 'Astra_Customizer_Sanitizes', 'sanitize_responsive_slider' ), 'suffix' => array( 'px', 'em', 'vw', 'rem' ), 'input_attrs' => array( 'px' => array( 'min' => 0, 'step' => 1, 'max' => 200, ), 'em' => array( 'min' => 0, 'step' => 0.01, 'max' => 20, ), 'vw' => array( 'min' => 0, 'step' => 0.1, 'max' => 25, ), 'rem' => array( 'min' => 0, 'step' => 0.1, 'max' => 20, ), ), ), /** * Option: Primary Footer Button Font Extras */ array( 'name' => $builder_type . '-' . $_prefix . '-font-extras', 'parent' => ASTRA_THEME_SETTINGS . '[' . $builder_type . '-' . $_prefix . '-text-typography]', 'section' => $_section, 'type' => 'sub-control', 'control' => 'ast-font-extras', 'priority' => 5, 'default' => astra_get_option( 'breadcrumb-font-extras' ), 'context' => Astra_Builder_Helper::$general_tab, 'title' => __( 'Font Extras', 'astra' ), ), ); if ( 'footer' === $builder_type ) { $button_config[] = array( array( 'name' => ASTRA_THEME_SETTINGS . '[footer-button-' . $index . '-alignment]', 'default' => astra_get_option( 'footer-button-' . $index . '-alignment' ), 'type' => 'control', 'control' => 'ast-selector', 'section' => $_section, 'priority' => 35, 'title' => __( 'Alignment', 'astra' ), 'context' => Astra_Builder_Helper::$general_tab, 'transport' => 'postMessage', 'choices' => array( 'flex-start' => 'align-left', 'center' => 'align-center', 'flex-end' => 'align-right', ), 'divider' => array( 'ast_class' => 'ast-top-section-divider' ), ), ); } $button_config[] = Astra_Builder_Base_Configuration::prepare_visibility_tab( $_section, $builder_type ); $button_config[] = Astra_Extended_Base_Configuration::prepare_advanced_tab( $_section ); } $button_config = call_user_func_array( 'array_merge', $button_config + array( array() ) ); $configurations = array_merge( $configurations, $button_config ); return $configurations; } } /** * Kicking this off by creating object of this class. */ new Astra_Button_Component_Configs(); /** * Header Builder Configuration. * * @author Astra * @package Astra * @copyright Copyright (c) 2023, Astra * @link https://wpastra.com/ * @since 4.5.2 */ if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Register header_builder header builder Customizer Configurations. * * @param array $configurations Astra Customizer Configurations. * @since 4.5.2 * @return array Astra Customizer Configurations with updated configurations. */ function astra_header_header_builder_configuration( $configurations = array() ) { $cloned_component_track = Astra_Builder_Helper::$component_count_array; $widget_config = array(); $astra_has_widgets_block_editor = astra_has_widgets_block_editor(); for ( $index = 1; $index <= Astra_Builder_Helper::$num_of_header_button; $index++ ) { $header_button_section = 'section-hb-button-' . $index; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( in_array( $header_button_section, $cloned_component_track['removed-items'], true ) ) { /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort continue; } $item = array( 'name' => ( 1 === Astra_Builder_Helper::$num_of_header_button ) ? 'Button' : 'Button ' . $index, 'icon' => 'admin-links', 'section' => $header_button_section, 'clone' => defined( 'ASTRA_EXT_VER' ), 'type' => 'button', 'builder' => 'header', ); Astra_Builder_Helper::$header_desktop_items[ 'button-' . $index ] = $item; Astra_Builder_Helper::$header_mobile_items[ 'button-' . $index ] = $item; } for ( $index = 1; $index <= Astra_Builder_Helper::$num_of_header_html; $index++ ) { $header_html_section = 'section-hb-html-' . $index; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( in_array( $header_html_section, $cloned_component_track['removed-items'], true ) ) { /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort continue; } $item = array( 'name' => ( 1 === Astra_Builder_Helper::$num_of_header_html ) ? 'HTML' : 'HTML ' . $index, 'icon' => 'text', 'section' => $header_html_section, 'clone' => defined( 'ASTRA_EXT_VER' ), 'type' => 'html', 'builder' => 'header', ); Astra_Builder_Helper::$header_desktop_items[ 'html-' . $index ] = $item; Astra_Builder_Helper::$header_mobile_items[ 'html-' . $index ] = $item; } for ( $index = 1; $index <= Astra_Builder_Helper::$num_of_header_widgets; $index++ ) { $header_widget_section = 'sidebar-widgets-header-widget-' . $index; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( in_array( $header_widget_section, $cloned_component_track['removed-items'], true ) ) { /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort continue; } $item = array( 'name' => ( 1 === Astra_Builder_Helper::$num_of_header_widgets ) ? 'Widget' : 'Widget ' . $index, 'icon' => 'wordpress', 'section' => $header_widget_section, 'clone' => defined( 'ASTRA_EXT_VER' ), 'type' => 'widget', 'builder' => 'header', ); if ( $astra_has_widgets_block_editor ) { $widget_config[] = array( 'name' => $header_widget_section, 'type' => 'section', 'priority' => 5, 'panel' => 'panel-header-builder-group', ); } Astra_Builder_Helper::$header_desktop_items[ 'widget-' . $index ] = $item; Astra_Builder_Helper::$header_mobile_items[ 'widget-' . $index ] = $item; } if ( $astra_has_widgets_block_editor ) { $configurations = array_merge( $configurations, $widget_config ); } for ( $index = 1; $index <= Astra_Builder_Helper::$num_of_header_menu; $index++ ) { switch ( $index ) { case 1: $name = __( 'Primary Menu', 'astra' ); break; case 2: $name = __( 'Secondary Menu', 'astra' ); break; default: $name = __( 'Menu ', 'astra' ) . $index; break; } $item = array( 'name' => $name, 'icon' => 'menu', 'section' => 'section-hb-menu-' . $index, 'clone' => defined( 'ASTRA_EXT_VER' ), 'type' => 'menu', 'builder' => 'header', ); Astra_Builder_Helper::$header_desktop_items[ 'menu-' . $index ] = $item; Astra_Builder_Helper::$header_mobile_items[ 'menu-' . $index ] = $item; } for ( $index = 1; $index <= Astra_Builder_Helper::$num_of_header_social_icons; $index++ ) { $header_social_section = 'section-hb-social-icons-' . $index; /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( in_array( $header_social_section, $cloned_component_track['removed-items'], true ) ) { /** @psalm-suppress PossiblyUndefinedStringArrayOffset */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort continue; } $item = array( 'name' => ( 1 === Astra_Builder_Helper::$num_of_header_social_icons ) ? 'Social' : 'Social ' . $index, 'icon' => 'share', 'section' => $header_social_section, 'clone' => defined( 'ASTRA_EXT_VER' ), 'type' => 'social-icons', 'builder' => 'header', ); Astra_Builder_Helper::$header_desktop_items[ 'social-icons-' . $index ] = $item; Astra_Builder_Helper::$header_mobile_items[ 'social-icons-' . $index ] = $item; } $_configs = array( /* * Header Builder section */ array( 'name' => 'section-header-builder', 'type' => 'section', 'priority' => 5, 'title' => __( 'Header Builder', 'astra' ), 'panel' => 'panel-header-builder-group', ), /** * Option: Header Layout */ array( 'name' => 'section-header-builder-layout', 'type' => 'section', 'priority' => 0, 'title' => __( 'Header Layout', 'astra' ), 'panel' => 'panel-header-builder-group', ), /** * Option: Header Builder Tabs */ array( 'name' => 'section-header-builder-layout-ast-context-tabs', 'section' => 'section-header-builder-layout', 'type' => 'control', 'control' => 'ast-builder-header-control', 'priority' => 0, 'description' => '', ), /** * Header Clone Component Track. */ array( 'name' => ASTRA_THEME_SETTINGS . '[cloned-component-track]', 'section' => 'section-header-builder-layout', 'type' => 'control', 'control' => 'ast-hidden', 'priority' => 43, 'transport' => 'postMessage', 'partial' => false, 'default' => astra_get_option( 'cloned-component-track' ), ), /** * Option: Header Builder */ array( 'name' => ASTRA_THEME_SETTINGS . '[builder-header]', 'section' => 'section-header-builder', 'type' => 'control', 'control' => 'ast-builder-header-control', 'priority' => 40, 'description' => '', 'context' => array(), 'divider' => ( astra_showcase_upgrade_notices() ) ? array() : array( 'ast_class' => 'ast-pro-available' ), ), /** * Option: Header Desktop Items. */ array( 'name' => ASTRA_THEME_SETTINGS . '[header-desktop-items]', 'section' => 'section-header-builder', 'type' => 'control', 'control' => 'ast-builder', 'title' => __( 'Header Builder', 'astra' ), 'priority' => 25, 'default' => astra_get_option( 'header-desktop-items' ), 'choices' => Astra_Builder_Helper::$header_desktop_items, 'transport' => 'postMessage', 'partial' => array( 'selector' => '#masthead', 'container_inclusive' => true, 'render_callback' => array( Astra_Builder_Header::get_instance(), 'header_builder_markup' ), ), 'input_attrs' => array( 'group' => ASTRA_THEME_SETTINGS . '[header-desktop-items]', 'rows' => array( 'popup', 'above', 'primary', 'below' ), 'zones' => array( 'popup' => array( 'popup_content' => 'Popup Content', ), 'above' => array( 'above_left' => 'Top - Left', 'above_left_center' => 'Top - Left Center', 'above_center' => 'Top - Center', 'above_right_center' => 'Top - Right Center', 'above_right' => 'Top - Right', ), 'primary' => array( 'primary_left' => 'Main - Left', 'primary_left_center' => 'Main - Left Center', 'primary_center' => 'Main - Center', 'primary_right_center' => 'Main - Right Center', 'primary_right' => 'Main - Right', ), 'below' => array( 'below_left' => 'Bottom - Left', 'below_left_center' => 'Bottom - Left Center', 'below_center' => 'Bottom - Center', 'below_right_center' => 'Bottom - Right Center', 'below_right' => 'Bottom - Right', ), ), 'status' => array( 'above' => true, 'primary' => true, 'below' => true, ), ), 'context' => array( array( 'setting' => 'ast_selected_device', 'value' => 'desktop', ), ), ), /** * Header Desktop Available draggable items. */ array( 'name' => ASTRA_THEME_SETTINGS . '[header-desktop-draggable-items]', 'section' => 'section-header-builder-layout', 'type' => 'control', 'control' => 'ast-draggable-items', 'priority' => 30, 'input_attrs' => array( 'group' => ASTRA_THEME_SETTINGS . '[header-desktop-items]', 'zones' => array( 'popup', 'above', 'primary', 'below' ), ), 'context' => array( array( 'setting' => 'ast_selected_device', 'value' => 'desktop', ), array( 'setting' => 'ast_selected_tab', 'value' => 'general', ), ), 'divider' => array( 'ast_class' => 'ast-section-spacing' ), ), /** * Option: Header Mobile Items. */ array( 'name' => ASTRA_THEME_SETTINGS . '[header-mobile-items]', 'section' => 'section-header-builder', 'type' => 'control', 'control' => 'ast-builder', 'title' => __( 'Header Builder', 'astra' ), 'priority' => 35, 'default' => astra_get_option( 'header-mobile-items' ), 'choices' => Astra_Builder_Helper::$header_mobile_items, 'transport' => 'postMessage', 'partial' => array( 'selector' => '#masthead', 'container_inclusive' => true, 'render_callback' => array( Astra_Builder_Header::get_instance(), 'header_builder_markup' ), ), 'input_attrs' => array( 'group' => ASTRA_THEME_SETTINGS . '[header-mobile-items]', 'rows' => array( 'popup', 'above', 'primary', 'below' ), 'zones' => array( 'popup' => array( 'popup_content' => 'Popup Content', ), 'above' => array( 'above_left' => 'Top - Left', 'above_center' => 'Top - Center', 'above_right' => 'Top - Right', ), 'primary' => array( 'primary_left' => 'Main - Left', 'primary_center' => 'Main - Center', 'primary_right' => 'Main - Right', ), 'below' => array( 'below_left' => 'Bottom - Left', 'below_center' => 'Bottom - Center', 'below_right' => 'Bottom - Right', ), ), 'status' => array( 'above' => true, 'primary' => true, 'below' => true, ), ), 'context' => Astra_Builder_Helper::$responsive_devices, ), /** * Header Mobile Available draggable items. */ array( 'name' => ASTRA_THEME_SETTINGS . '[header-mobile-draggable-items]', 'section' => 'section-header-builder-layout', 'type' => 'control', 'control' => 'ast-draggable-items', 'input_attrs' => array( 'group' => ASTRA_THEME_SETTINGS . '[header-mobile-items]', 'zones' => array( 'popup', 'above', 'primary', 'below' ), ), 'priority' => 43, 'context' => array( array( 'setting' => 'ast_selected_device', 'operator' => 'in', 'value' => array( 'tablet', 'mobile' ), ), array( 'setting' => 'ast_selected_tab', 'value' => 'general', ), ), ), /** * Header Mobile popup items. */ array( 'name' => ASTRA_THEME_SETTINGS . '[header-mobile-popup-items]', 'section' => 'section-header-builder-layout', 'type' => 'control', 'control' => 'ast-hidden', 'priority' => 43, 'transport' => 'postMessage', 'partial' => array( 'selector' => '#ast-mobile-popup-wrapper', 'container_inclusive' => true, 'render_callback' => array( Astra_Builder_Header::get_instance(), 'mobile_popup' ), ), 'default' => false, ), /** * Option: Blog Color Section heading */ array( 'name' => ASTRA_THEME_SETTINGS . '[header-transparent-link-heading]', 'type' => 'control', 'control' => 'ast-heading', 'section' => 'section-header-builder-layout', 'title' => __( 'Header Types', 'astra' ), 'priority' => 44, 'settings' => array(), 'context' => Astra_Builder_Helper::$general_tab, 'divider' => array( 'ast_class' => 'ast-section-spacing' ), ), /** * Option: Header Transparant */ array( 'name' => ASTRA_THEME_SETTINGS . '[header-transparant-link]', 'section' => 'section-header-builder-layout', 'type' => 'control', 'control' => 'ast-header-type-button', 'input_attrs' => array( 'section' => 'section-transparent-header', 'label' => esc_html__( 'Transparent Header', 'astra' ), ), 'priority' => 45, 'context' => Astra_Builder_Helper::$general_tab, 'settings' => false, 'divider' => array( 'ast_class' => 'ast-section-spacing' ), ), // Option: Header Width. array( 'name' => ASTRA_THEME_SETTINGS . '[hb-header-main-layout-width]', 'default' => astra_get_option( 'hb-header-main-layout-width' ), 'type' => 'control', 'control' => 'ast-selector', 'section' => 'section-header-builder-layout', 'priority' => 4, 'title' => __( 'Width', 'astra' ), 'choices' => array( 'full' => __( 'Full Width', 'astra' ), 'content' => __( 'Content Width', 'astra' ), ), 'context' => array( array( 'setting' => 'ast_selected_tab', 'value' => 'design', ), array( 'setting' => 'ast_selected_device', 'value' => 'desktop', ), ), 'transport' => 'postMessage', 'renderAs' => 'text', 'responsive' => false, 'divider' => array( 'ast_class' => 'ast-section-spacing ast-bottom-section-divider' ), ), array( 'name' => ASTRA_THEME_SETTINGS . '[section-header-builder-layout-margin]', 'default' => astra_get_option( 'section-header-builder-layout-margin' ), 'type' => 'control', 'transport' => 'postMessage', 'control' => 'ast-responsive-spacing', 'sanitize_callback' => array( 'Astra_Customizer_Sanitizes', 'sanitize_responsive_spacing' ), 'section' => 'section-header-builder-layout', 'priority' => 220, 'title' => __( 'Margin', 'astra' ), 'linked_choices' => true, 'unit_choices' => array( 'px', 'em', '%' ), 'choices' => array( 'top' => __( 'Top', 'astra' ), 'right' => __( 'Right', 'astra' ), 'bottom' => __( 'Bottom', 'astra' ), 'left' => __( 'Left', 'astra' ), ), 'context' => Astra_Builder_Helper::$design_tab, ), ); // Learn More link if Astra Pro is not activated. if ( astra_showcase_upgrade_notices() ) { /** * Option: Pro options */ $_configs[] = array( 'name' => ASTRA_THEME_SETTINGS . '[header-builder-pro-items]', 'type' => 'control', 'control' => 'ast-upgrade', 'renderAs' => 'list', 'choices' => array( 'one' => array( 'title' => __( 'Sticky header', 'astra' ), ), 'two' => array( 'title' => __( 'Divider element', 'astra' ), ), 'three' => array( 'title' => __( 'Language Switcher element', 'astra' ), ), 'four' => array( 'title' => __( 'Toggle Button element', 'astra' ), ), 'five' => array( 'title' => __( 'Clone, Delete element options', 'astra' ), ), 'six' => array( 'title' => __( 'Increased element count', 'astra' ), ), 'seven' => array( 'title' => __( 'More design options', 'astra' ), ), ), 'section' => 'section-header-builder-layout', 'default' => '', 'priority' => 999, 'context' => array(), 'title' => __( 'Make an instant connection with amazing site headers', 'astra' ), 'divider' => array( 'ast_class' => 'ast-top-section-divider' ), ); } /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort if ( defined( 'ASTRA_EXT_VER' ) && Astra_Ext_Extension::is_active( 'sticky-header' ) ) { /** @psalm-suppress UndefinedClass */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort /** * Option: Header Transparant */ $_configs[] = array( 'name' => ASTRA_THEME_SETTINGS . '[header-sticky-link]', 'section' => 'section-header-builder-layout', 'type' => 'control', 'control' => 'ast-header-type-button', 'input_attrs' => array( 'section' => 'section-sticky-header', 'label' => esc_html__( 'Sticky Header', 'astra' ), ), 'priority' => 45, 'context' => Astra_Builder_Helper::$general_tab, 'settings' => false, ); } $_configs = array_merge( $_configs, $configurations ); if ( Astra_Builder_Customizer::astra_collect_customizer_builder_data() ) { array_map( 'astra_save_header_customizer_configs', $_configs ); } return $_configs; } if ( Astra_Builder_Customizer::astra_collect_customizer_builder_data() ) { astra_header_header_builder_configuration(); }

操作のヒント

UIの操作は、オペレーティングシステムの標準ファイルマネージャにほぼ準拠しています。ただし、モバイルブラウザではドラッグ&ドロップはできません。

  • 右クリックまたはロングタップでコンテキストメニューを表示します。
  • アイテムを移動/コピーするには、フォルダツリーまたはワークスペースにドラッグ&ドロップします。
  • ワークスペース内のアイテムの選択は、ShiftキーまたはAltキー(Optionキー)で選択範囲を拡張できます。
  • コピー先のフォルダまたはワークスペースにドラッグアンドドロップして、ファイルとフォルダをアップロードします。
  • アップロードダイアログでは、クリップボードのデータやURLリストのペースト/ドロップ、他のブラウザやファイルマネージャからのドラッグ&ドロップなどを受け入れることができます。
  • Altキー(Optionキー)を押しながらドラッグすると、ブラウザの外にドラッグできます。Google Chromeでダウンロード操作になります。
/** * HTML component. * * @package Astra Builder * @author Brainstorm Force * @copyright Copyright (c) 2020, Brainstorm Force * @link https://www.brainstormforce.com * @since Astra 3.0.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } define( 'ASTRA_HEADER_HTML_DIR', ASTRA_THEME_DIR . 'inc/builder/type/header/html' ); define( 'ASTRA_HEADER_HTML_URI', ASTRA_THEME_URI . 'inc/builder/type/header/html' ); /** * Heading Initial Setup * * @since 3.0.0 */ class Astra_Header_Html_Component { /** * Constructor function that initializes required actions and hooks */ public function __construct() { // @codingStandardsIgnoreStart WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once ASTRA_HEADER_HTML_DIR . '/class-astra-header-html-component-loader.php'; // Include front end files. if ( ! is_admin() || Astra_Builder_Customizer::astra_collect_customizer_builder_data() ) { require_once ASTRA_HEADER_HTML_DIR . '/dynamic-css/dynamic.css.php'; } // @codingStandardsIgnoreEnd WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } } /** * Kicking this off by creating an object. */ new Astra_Header_Html_Component(); /** * Search Styling Loader for Astra theme. * * @package astra-builder * @author Astra * @copyright Copyright (c) 2020, Astra * @link https://wpastra.com/ * @since 3.0.0 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Customizer Initialization * * @since 3.0.0 */ class Astra_Header_Search_Component_Loader { /** * Constructor * * @since 3.0.0 */ public function __construct() { add_filter( 'astra_get_search', array( $this, 'get_search_markup' ), 10, 3 ); add_action( 'customize_preview_init', array( $this, 'preview_scripts' ), 110 ); } /** * Customizer Preview * * @since 3.0.0 */ public function preview_scripts() { /** * Load unminified if SCRIPT_DEBUG is true. */ /* Directory and Extension */ $dir_name = ( SCRIPT_DEBUG ) ? 'unminified' : 'minified'; $file_prefix = ( SCRIPT_DEBUG ) ? '' : '.min'; wp_enqueue_script( 'astra-header-builder-search-customizer-preview-js', ASTRA_HEADER_SEARCH_URI . '/assets/js/' . $dir_name . '/customizer-preview' . $file_prefix . '.js', array( 'customize-preview', 'astra-customizer-preview-js' ), ASTRA_THEME_VERSION, true ); } /** * Adding Wrapper for Search Form. * * @since 3.0.0 * * @param string $search_markup Search Form Content. * @param string $option Search Form Options. * @param string $device Device Desktop/Tablet/Mobile. * @return Search HTML structure created. */ public static function get_search_markup( $search_markup, $option = '', $device = '' ) { if ( is_customize_preview() ) { Astra_Builder_UI_Controller::render_customizer_edit_button(); } return $search_markup; } } /** * Kicking this off by creating the object of the class. */ new Astra_Header_Search_Component_Loader(); shouhdymetals.com https://validator.w3.org/feed/docs/rss2.html Gallery Footer Template Services Header Template Shipyards/Ships Metal Scrap Recycling Incineration Services Social Environmental Fleet and Scrap Collecting Dismantling and Demolition Services by Shouhdy Metals Oil & Gas Metal Scrap Management FAQ Wood Recycling Service Wastepaper and Carton Scrap Recycling  E-Waste Recycling Contact Us About Us Home