Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix (WooCommerce): remove css styles displayed on shop page #3381

Open
wants to merge 5 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/compatibility/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
}

require_once( plugin_dir_path( __FILE__ ) . './neve/index.php' );
require_once( plugin_dir_path( __FILE__ ) . './woocommerce.php' );
60 changes: 60 additions & 0 deletions src/compatibility/woocommerce.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?php

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}

/**
* In WooCommerce Shop page, <style> tags are stripped out and the CSS styles are displayed in the frontend.
* This function removes the <style> tags and CSS styles before they are stripped out.
*/
if ( ! function_exists( 'stackable_pre_kses_woocomerce_shop' ) ) {

function stackable_pre_kses_woocomerce_shop( $content, $allowed_html, $context ) {
$optimized_css = get_post_meta( wc_get_page_id( 'shop' ), 'stackable_optimized_css', true );

// remove CSS before kses strips out <style> tags
if ( ! empty( $optimized_css ) ) {
$content = str_replace( '<style>' . $optimized_css . '</style>', '', $content );
}

return $content;
}

function is_woocommerce_shop_page() {
// only add filter when on the WooCommerce Shop page
if ( function_exists('is_shop' ) && is_shop() ) {
add_filter('pre_kses', 'stackable_pre_kses_woocomerce_shop', 10, 3);
}

}

add_action( 'woocommerce_before_main_content', 'is_woocommerce_shop_page' );
}

if ( ! function_exists( 'stackable_check_if_woocommerce_shop' ) ) {

function stackable_check_if_woocommerce_shop( $optimize_css ) {
// Load cached CSS for the WooCommerce Shop page
// is_singular() returns false when on the Shop page so we need to use is_shop()
return $optimize_css || ( function_exists('is_shop' ) && is_shop() );
}

add_filter( 'stackable/load_cached_css_for_post', 'stackable_check_if_woocommerce_shop' );
}

if ( ! function_exists( 'stackable_get_woocommerce_shop_page_id' ) ) {

function stackable_get_woocommerce_shop_page_id( $post_id ) {
// use wc_get_page_id() to retrieve the page ID of the Shop page
// do this because get_the_ID() returns the product page ID when on the Shop page
if ( function_exists('is_shop' ) && is_shop() ) {
return wc_get_page_id( 'shop' );
}
return $post_id;
}

add_filter( 'stackable/get_post_id_for_cached_css', 'stackable_get_woocommerce_shop_page_id' );

}
6 changes: 4 additions & 2 deletions src/css-optimize.php
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,10 @@ public function load_cached_css_for_post() {
// wp_template_part then we might need to use the actions:
// render_block_core_template_part_post and
// render_block_core_template_part_file
if ( is_singular() && ! is_preview() && ! is_attachment() ) {
$post_id = get_the_ID();
$optimize_css = is_singular() && ! is_preview() && ! is_attachment();
$optimize_css = apply_filters( 'stackable/load_cached_css_for_post', $optimize_css );
if ( $optimize_css ) {
$post_id = apply_filters( 'stackable/get_post_id_for_cached_css', get_the_ID() );
$this->optimized_css = get_post_meta( $post_id, 'stackable_optimized_css', true );

if ( ! empty( $this->optimized_css ) ) {
Expand Down
Loading