Skip to content

Instantly share code, notes, and snippets.

@artikus11
Created December 10, 2022 23:04
Show Gist options
  • Save artikus11/04037351eb26e91ad14cae099279d42c to your computer and use it in GitHub Desktop.
Save artikus11/04037351eb26e91ad14cae099279d42c to your computer and use it in GitHub Desktop.
Подключение скриптов и стилей только на страницах WooCommerce
/**
* Подключение скриптов и стилей только на страницах WooCommerce
*
* @testedwith WooCommerce 7.0
* @verphp 7.4
* @author Artem Abramovich
*/
function art_connection_css_js_only_woocommerce_pages() {
if ( ! class_exists( 'Woocommerce' ) ) {
return;
}
if ( is_admin() ) {
return;
}
global $post;
$parse_content = parse_blocks( $post->post_content );
$blocks_name = array_filter( wp_list_pluck( $parse_content, 'blockName' ) );
$wc_blocks_name = [];
foreach ( $blocks_name as $block_name ) {
if ( false !== strpos( $block_name, 'woocommerce' ) ) {
$wc_blocks_name[] = $block_name;
}
}
$has_wc_blocks = false;
if ( ! empty( $wc_blocks_name ) ) {
$has_wc_blocks = true;
}
$has_wc_shortcode_products = false;
if ( has_shortcode( $post->post_content, 'products' ) ) {
$has_wc_shortcode_products = true;
}
$enqueues = [
'styles' => [
'woocommerce-inline',
'photoswipe',
'photoswipe-default-skin',
'select2',
'woocommerce_prettyPhoto_css',
'woocommerce-layout',
'woocommerce-smallscreen',
'woocommerce-general',
'wc-blocks-vendors-style',
'wc-blocks-style',
],
'scripts' => [
'flexslider',
'js-cookie',
'jquery-blockui',
'jquery-cookie',
'jquery-payment',
'photoswipe',
'photoswipe-ui-default',
'prettyPhoto',
'prettyPhoto-init',
'select2',
'selectWoo',
'wc-address-i18n',
'wc-add-payment-method',
'wc-cart',
'wc-cart-fragments',
'wc-checkout',
'wc-country-select',
'wc-credit-card-form',
'wc-add-to-cart',
'wc-add-to-cart-variation',
'wc-geolocation',
'wc-lost-password',
'wc-password-strength-meter',
'wc-single-product',
'woocommerce',
'zoom',
'wc-blocks-middleware',
'wc-blocks',
'wc-blocks-registry',
'wc-vendors',
'wc-shared-context',
'wc-shared-hocs',
'wc-price-format',
'wc-active-filters-block-frontend',
'wc-stock-filter-block-frontend',
'wc-attribute-filter-block-frontend',
'wc-price-filter-block-frontend',
'wc-reviews-block-frontend',
'wc-all-products-block-frontend',
],
];
if ( is_product() ) {
unset(
$enqueues['scripts'][ array_search( 'jquery-blockui', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'wc-single-product', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'flexslider', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'photoswipe', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'zoom', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'prettyPhoto', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'prettyPhoto-init', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'photoswipe-ui-default', $enqueues['scripts'], true ) ],
$enqueues['styles'][ array_search( 'photoswipe', $enqueues['styles'], true ) ],
$enqueues['styles'][ array_search( 'photoswipe-default-skin', $enqueues['styles'], true ) ],
$enqueues['styles'][ array_search( 'woocommerce_prettyPhoto_css', $enqueues['styles'], true ) ]
);
}
if ( is_woocommerce() || is_product_category() || is_product_tag() || $has_wc_blocks || $has_wc_shortcode_products ) {
unset(
$enqueues['scripts'][ array_search( 'woocommerce', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'wc-add-to-cart', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'wc-cart-fragments', $enqueues['scripts'], true ) ]
);
}
if ( is_cart() || is_checkout() ) {
unset(
$enqueues['scripts'][ array_search( 'wc-add-to-cart', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'wc-checkout', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'wc-cart', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'wc-cart-fragments', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'wc-country-select', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'select2', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'selectWoo', $enqueues['scripts'], true ) ],
$enqueues['styles'][ array_search( 'select2', $enqueues['styles'], true ) ]
);
}
if ( is_account_page() ) {
unset(
$enqueues['scripts'][ array_search( 'wc-country-select', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'select2', $enqueues['scripts'], true ) ],
$enqueues['scripts'][ array_search( 'selectWoo', $enqueues['scripts'], true ) ],
$enqueues['styles'][ array_search( 'select2', $enqueues['styles'], true ) ]
);
}
foreach ( $enqueues as $key => $enqueue ) {
if ( 'scripts' === $key ) {
foreach ( $enqueue as $item ) {
wp_dequeue_script( $item );
}
}
if ( 'styles' === $key ) {
foreach ( $enqueue as $item ) {
wp_dequeue_style( $item );
}
}
}
}
add_action( 'wp_enqueue_scripts', 'art_connection_css_js_only_woocommerce_pages', 999 );
@artikus11
Copy link
Author

Подключение скриптов и стилей только на страницах WooCommerce

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment