false ) ); $custom_types = array(); $is_cpt = false; if ( ! empty( $custom_post_types ) ) { $custom_types = array_keys( $custom_post_types ); } $post_type = get_post_type( $post ); if ( in_array( $post_type, $custom_types, true ) && is_singular() && 'project' !== $post_type ) { $is_cpt = true; } } return $is_cpt; } /** * Extracts gutter width values from post/page content. * * @param array $matches matched gutters. * * @return array * @since 4.10.0 */ function et_get_content_gutter_widths( $matches ) { $gutters = array(); foreach ( $matches as $match ) { preg_match_all( '/"([^"]+)"/', $match, $matches ); $gutters = array_merge( $gutters, $matches[1] ); } // Convert strings to integers. $gutters = array_map( 'intval', $gutters ); return $gutters; } /** * Check if any widgets are currently active. * * @return bool * @since 4.10.0 */ function et_pb_are_widgets_used() { global $wp_registered_sidebars; $sidebars = get_option( 'sidebars_widgets' ); foreach ( $wp_registered_sidebars as $sidebar_key => $sidebar_options ) { if ( ! empty( $sidebars[ $sidebar_key ] ) ) { return true; } } return false; } /** * Check if a specific value is "on" on the page. * * @param array $values matched values. * * @return bool * @since 4.10.0 */ function et_check_if_particular_value_is_on( $values ) { foreach ( $values as $match ) { preg_match_all( '/"([^"]+)"/', $match, $matches ); if ( in_array( 'on', $matches[1], true ) ) { return true; }; } return false; } /** * Get if a non-default preset value. * * @param array $values Matched values. * * @return array * @since 4.10.0 */ function et_get_non_default_preset_ids( $values ) { $result = array(); foreach ( $values as $match ) { preg_match_all( '/"([^"]+)"/', $match, $matches ); if ( ! in_array( 'default', $matches[1], true ) ) { $result = array_merge( $result, $matches[1] ); } } return $result; } /** * Check to see if this is a front end request applicable to Dynamic Assets. * * @since 4.10.0 * * @return bool */ function et_is_dynamic_front_end_request() { static $is_dynamic_front_end_request = null; if ( null === $is_dynamic_front_end_request ) { if ( // Disable for WordPress admin requests. ! is_admin() // Disable for non-front-end requests. && ! wp_doing_ajax() && ! wp_doing_cron() && ! wp_is_json_request() && ! ( defined( 'REST_REQUEST' ) && REST_REQUEST ) && ! ( defined( 'WP_CLI' ) && WP_CLI ) && ! ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) && ! is_trackback() && ! is_feed() && ! get_query_var( 'sitemap' ) // Disable when in preview modes. && ! is_customize_preview() && ! is_et_pb_preview() && ! ET_GB_Block_Layout::is_layout_block_preview() && ! is_preview() // Disable when using the visual builder. && ! et_fb_is_enabled() // Disable on paginated index pages when blog style mode is enabled and when using the Divi Builder plugin. && ! ( is_paged() && ( 'on' === et_get_option( 'divi_blog_style', 'off' ) || et_is_builder_plugin_active() ) ) ) { $is_dynamic_front_end_request = true; } } return $is_dynamic_front_end_request; } /** * Check to see if this is a front end request. * * @since 4.10.0 * * @return bool */ function et_is_front_end_request() { static $et_is_front_end_request = null; if ( null === $et_is_front_end_request ) { if ( // Disable for WordPress admin requests. ! is_admin() && ! wp_doing_ajax() && ! wp_doing_cron() ) { $et_is_front_end_request = true; } } return $et_is_front_end_request; } /** * Check if the current request should generate Dynamic Assets. * We only generate dynamic assets on the front end and when cache dir is writable. * * @since 4.10.0 * * @return bool */ function et_should_generate_dynamic_assets() { static $should_generate_assets = null; if ( null === $should_generate_assets ) { if ( // Cache directory must be writable. et_core_cache_dir()->can_write // Request must be an applicable front-end request. && et_is_dynamic_front_end_request() ) { $should_generate_assets = true; } } /** * Filters whether to generate dynamic assets. * * @since 4.10.6 * * @param bool $should_generate_assets */ return apply_filters( 'et_should_generate_dynamic_assets', (bool) $should_generate_assets ); } /** * Check if Dynamic CSS is enabled. * * @return bool * @since 4.10.0 */ function et_use_dynamic_css() { global $shortname; static $et_use_dynamic_css = null; if ( null === $et_use_dynamic_css ) { if ( et_is_builder_plugin_active() ) { $options = get_option( 'et_pb_builder_options', array() ); $dynamic_css = isset( $options['performance_main_dynamic_css'] ) ? $options['performance_main_dynamic_css'] : 'on'; } else { $dynamic_css = et_get_option( $shortname . '_dynamic_css', 'on' ); } if ( 'on' === $dynamic_css && et_should_generate_dynamic_assets() ) { $et_use_dynamic_css = true; } } /** * Filters whether to use dynamic CSS. * * @since 4.10.6 * * @param bool $et_use_dynamic_css */ return apply_filters( 'et_use_dynamic_css', (bool) $et_use_dynamic_css ); } /** * Check if Dynamic Icons are enabled. * * @since 4.10.0 */ function et_use_dynamic_icons() { global $shortname; $child_theme_active = is_child_theme(); if ( et_is_builder_plugin_active() ) { $options = get_option( 'et_pb_builder_options', array() ); $dynamic_icons = isset( $options['performance_main_dynamic_icons'] ) ? $options['performance_main_dynamic_icons'] : et_dynamic_icons_default_value(); } else { $dynamic_icons = et_get_option( $child_theme_active ? $shortname . '_dynamic_icons_child_theme' : $shortname . '_dynamic_icons', et_dynamic_icons_default_value() ); } return $dynamic_icons; } /** * Check if JavaScript On Demand is enabled. * * @return bool * @since 4.10.0 */ function et_disable_js_on_demand() { global $shortname; static $et_disable_js_on_demand = null; if ( null === $et_disable_js_on_demand ) { if ( et_is_builder_plugin_active() ) { $options = get_option( 'et_pb_builder_options', array() ); $dynamic_js_libraries = isset( $options['performance_main_dynamic_js_libraries'] ) ? $options['performance_main_dynamic_js_libraries'] : 'on'; } else { $dynamic_js_libraries = et_get_option( $shortname . '_dynamic_js_libraries', 'on' ); } if ( // Disable when theme option not enabled. 'on' !== $dynamic_js_libraries // Disable when not an applicable front-end request. || ! et_is_dynamic_front_end_request() ) { $et_disable_js_on_demand = true; } } /** * Filters whether to disable JS on demand. * * @since 4.10.6 * * @param bool $et_disable_js_on_demand */ return apply_filters( 'et_disable_js_on_demand', (bool) $et_disable_js_on_demand ); } /** * Disable dynamic icons if TP modules are present. * * @since 4.10.0 */ function et_dynamic_icons_default_value() { $tp_extensions = DiviExtensions::get( 'all' ); $child_theme_active = is_child_theme(); if ( ! empty( $tp_extensions ) || ( $child_theme_active && ! et_is_builder_plugin_active() ) ) { return 'off'; } return 'on'; } /** * Get all active block widgets. * * This method will collect all active block widgets first. Later on, the result will be * cached to improve the performance. * * @since 4.10.5 * * @return array List of active block widgets. */ function et_get_active_block_widgets() { global $wp_version; static $active_block_widgets = null; $wp_major_version = substr( $wp_version, 0, 3 ); // Bail early if were pre WP 5.8, when block widgets were introduced. if ( version_compare( $wp_major_version, '5.8', '<' ) ) { return array(); } global $wp_widget_factory; $active_block_widgets = array(); $block_instance = $wp_widget_factory->get_widget_object( 'block' ); $block_settings = $block_instance->get_settings(); // Bail early if there is no active block widgets. if ( empty( $block_settings ) ) { return $active_block_widgets; } // Collect all active blocks. foreach ( $block_settings as $block_number => $block_setting ) { $block_content = et_()->array_get( $block_setting, 'content' ); $block_parsed = parse_blocks( $block_content ); $block_name = et_()->array_get( $block_parsed, array( '0', 'blockName' ) ); // Save and cache there result. if ( ! in_array( $block_name, $active_block_widgets, true ) ) { array_push( $active_block_widgets, $block_name ); } } return $active_block_widgets; } /** * Check whether current block widget is active or not. * * @since 4.10.5 * * @param string $block_widget_name Block widget name. * * @return boolean Whether current block widget is active or not. */ function et_is_active_block_widget( $block_widget_name ) { return in_array( $block_widget_name, et_get_active_block_widgets(), true ); } /** * Check whether Extra Home layout is being used. * * @since 4.17.5 * * @return boolean whether Extra Home layout is being used. */ function et_is_extra_layout_used_as_front() { return function_exists( 'et_extra_show_home_layout' ) && et_extra_show_home_layout() && is_front_page(); } /** * Check whether Extra Home layout is being used. * * @since 4.17.5 * * @return boolean whether Extra Home layout is being used. */ function et_is_extra_layout_used_as_home() { return function_exists( 'et_extra_show_home_layout' ) && et_extra_show_home_layout() && is_home(); } /** * Get Extra Home layout ID. * * @since 4.17.5 * * @return int|null */ function et_get_extra_home_layout_id() { if ( function_exists( 'extra_get_home_layout_id' ) ) { return extra_get_home_layout_id(); } return null; } /** * Get Extra Taxonomy layout ID. * * @since 4.17.5 * * @return int|null */ function et_get_extra_tax_layout_id() { if ( function_exists( 'extra_get_tax_layout_id' ) ) { return extra_get_tax_layout_id(); } return null; } /** * Get embeded media from post content. * * @since 4.20.1 * * @param int $content Post Content. * * @return boolean false on failure, true on success. */ function et_is_media_embedded_in_content( $content ) { // regex match for youtube and vimeo urls in $content. $pattern = '~https?://(?:www\.)?(?:youtube\.com/watch\?v=|youtu\.be/|vimeo\.com/)([^\s]+)~i'; preg_match_all( $pattern, $content, $matches ); if ( empty( $matches[0] ) ) { return false; } return true; }