| @@ -853,11 +853,9 @@ | ||
| 853 | 853 | */ |
| 854 | 854 | do_action( 'elementor/document/before_save', $this, $data ); |
| 855 | 855 | |
| 856 | 856 | if ( ! current_user_can( 'unfiltered_html' ) ) { |
| 857 | - $data = map_deep( $data, function ( $value ) { | |
| 858 | - return is_bool( $value ) || is_null( $value ) ? $value : wp_kses_post( $value ); | |
| 859 | - } ); | |
| 857 | + $data = Utils::kses_post_deep( $data ); | |
| 860 | 858 | } |
| 861 | 859 | |
| 862 | 860 | if ( ! empty( $data['settings'] ) ) { |
| 863 | 861 | if ( isset( $data['settings']['post_status'] ) && self::STATUS_AUTOSAVE === $data['settings']['post_status'] ) { |
| @@ -1871,10 +1869,14 @@ | ||
| 1871 | 1869 | |
| 1872 | 1870 | $this->do_print_elements( $elements_data ); |
| 1873 | 1871 | |
| 1874 | 1872 | if ( $should_store_scripts ) { |
| 1875 | - $scripts_to_queue = array_values( array_diff( $wp_scripts->queue, $scripts_ignored ) ); | |
| 1876 | - $styles_to_queue = array_values( array_diff( $wp_styles->queue, $styles_ignored ) ); | |
| 1873 | + $scripts_to_queue = $this->get_cached_asset_handles( array_diff( $wp_scripts->queue, $scripts_ignored ), 'scripts' ); | |
| 1874 | + $styles_to_queue = $this->get_cached_asset_handles( array_diff( $wp_styles->queue, $styles_ignored ), 'styles' ); | |
| 1875 | + $styles_to_queue = array_values( array_filter( | |
| 1876 | + $styles_to_queue, | |
| 1877 | + [ $this, 'should_enqueue_cached_style' ] | |
| 1878 | + ) ); | |
| 1877 | 1879 | } |
| 1878 | 1880 | |
| 1879 | 1881 | $cached_data = [ |
| 1880 | 1882 | 'content' => ob_get_clean(), |
| @@ -1895,8 +1897,12 @@ | ||
| 1895 | 1897 | } |
| 1896 | 1898 | |
| 1897 | 1899 | if ( ! empty( $cached_data['styles'] ) ) { |
| 1898 | 1900 | foreach ( $cached_data['styles'] as $style_handle ) { |
| 1901 | + if ( ! $this->should_enqueue_cached_style( $style_handle ) ) { | |
| 1902 | + continue; | |
| 1903 | + } | |
| 1904 | + | |
| 1899 | 1905 | wp_enqueue_style( $style_handle ); |
| 1900 | 1906 | } |
| 1901 | 1907 | } |
| 1902 | 1908 | } |
| @@ -1909,8 +1915,23 @@ | ||
| 1909 | 1915 | } |
| 1910 | 1916 | |
| 1911 | 1917 | echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped |
| 1912 | 1918 | } |
| 1919 | + } | |
| 1920 | + | |
| 1921 | + private function get_cached_asset_handles( array $rendered_handles, string $asset_type ): array { | |
| 1922 | + $page_assets = $this->get_meta( Assets_Iteration_Action::ASSETS_META_KEY ); | |
| 1923 | + $saved_handles = is_array( $page_assets ) ? ( $page_assets[ $asset_type ] ?? [] ) : []; | |
| 1924 | + | |
| 1925 | + return array_values( array_unique( array_merge( $rendered_handles, $saved_handles ) ) ); | |
| 1926 | + } | |
| 1927 | + | |
| 1928 | + private function should_enqueue_cached_style( $style_handle ): bool { | |
| 1929 | + if ( 0 !== strpos( $style_handle, 'elementor-post' ) ) { | |
| 1930 | + return true; | |
| 1931 | + } | |
| 1932 | + | |
| 1933 | + return (bool) wp_styles()->query( 'elementor-frontend', 'registered' ); | |
| 1913 | 1934 | } |
| 1914 | 1935 | |
| 1915 | 1936 | protected function do_print_elements( $elements_data ) { |
| 1916 | 1937 | $this->update_runtime_elements( $elements_data ); |