Little problem with woocommerce optimization

Hi, I have added a function to remove woocommerce scripts where they are not needed. The problem is that if I add the woocommerce slider to the homepage as it is not viewed as a woocommerce page (is_woocommerce) it is not displayed correctly. My question is if there is a way to target pages where woocommerce-related builder elements are inserted so that scripts can be loaded there too. I paste the code used


/**

 * Callback function that returns true if the current page is a WooCommerce page or false if otherwise.

 *

 * @return boolean true for WC pages and false for non WC pages

 */

function is_wc_page() {

return class_exists( 'WooCommerce' ) && ( is_woocommerce() || is_cart() || is_checkout() || is_account_page() );

}


add_action( 'template_redirect', 'conditionally_remove_wc_assets' );

/**

 * Remove WC stuff on non WC pages.

 */

function conditionally_remove_wc_assets() {

// if this is a WC page, abort.

if ( is_wc_page() ) {

return;

}


// remove WC generator tag

remove_filter( 'get_the_generator_html', 'wc_generator_tag', 10, 2 );

remove_filter( 'get_the_generator_xhtml', 'wc_generator_tag', 10, 2 );


// unload WC scripts

remove_action( 'wp_enqueue_scripts', [ WC_Frontend_Scripts::class, 'load_scripts' ] );

remove_action( 'wp_print_scripts', [ WC_Frontend_Scripts::class, 'localize_printed_scripts' ], 5 );

remove_action( 'wp_print_footer_scripts', [ WC_Frontend_Scripts::class, 'localize_printed_scripts' ], 5 );


// remove "Show the gallery if JS is disabled"

remove_action( 'wp_head', 'wc_gallery_noscript' );


// remove WC body class

remove_filter( 'body_class', 'wc_body_class' );

}


add_filter( 'woocommerce_enqueue_styles', 'conditionally_woocommerce_enqueue_styles' );

/**

 * Unload WC stylesheets on non WC pages

 *

 * @param array $enqueue_styles

 */

function conditionally_woocommerce_enqueue_styles( $enqueue_styles ) {

return is_wc_page() ? $enqueue_styles : array();

}


add_action( 'wp_enqueue_scripts', 'conditionally_wp_enqueue_scripts' );

/**

 * Remove inline style on non WC pages

 */

function conditionally_wp_enqueue_scripts() {

if ( ! is_wc_page() ) {

wp_dequeue_style( 'woocommerce-inline' );

wp_dequeue_style( 'wc-blocks-vendors-style' );

wp_dequeue_style( 'wc-blocks-style' );

}

}


// add_action( 'init', 'remove_wc_custom_action' );

function remove_wc_custom_action(){

remove_action( 'wp_head', 'wc_gallery_noscript' );

}

Comments

  • Solved using another callback function that is

    function is_wc_product() {

    return class_exists( 'WooCommerce' ) && ( get_posts( array( 'post_type' => 'product') ) );

    }

    and then I adapted the code accordingly

Sign In or Register to comment.