WordPress如何为WooCommerce指定页面加载资源及正确使用逻辑取反
WooCommerce 页面资源加载优化及反向判断解决方案
一、现有代码优化方案
你当前的代码逻辑方向是对的,但有两处可修正和优化的点:
- 资源加载函数误用:CSS文件需要用
wp_enqueue_style()而非wp_enqueue_script(),后者是专门用于加载JS文件的函数,错误调用可能导致资源识别异常。 - 逻辑运算符规范:WordPress官方编码规范推荐使用
||替代or,避免因运算符优先级问题导致判断逻辑出错。 - 可扩展优化:可以增加版本号、资源依赖参数,方便后续缓存管理和依赖声明。
优化后的完整代码如下:
function my_enqueue_woocommerce_assets() { // 仅在商店页、商品分类页、单品页加载资源 if ( is_shop() || is_product() || is_product_category() ) { wp_enqueue_style( 'woocommerce-custom-style', // 资源句柄,注意不要和其他资源重名 get_stylesheet_directory_uri() . '/assets/css/style.css', array(), // 依赖的其他CSS资源句柄,无依赖则留空 '1.0.0', // 自定义版本号,更新资源时修改版本号可强制刷新浏览器缓存 'all' // 媒体类型,默认all即可 ); // 如果需要加载JS资源,使用下方写法 /* wp_enqueue_script( 'woocommerce-custom-script', get_stylesheet_directory_uri() . '/assets/js/custom.js', array('jquery'), // 示例:声明依赖jQuery '1.0.0', true // 资源加载到页脚,优化页面打开速度 ); */ } } add_action( 'wp_enqueue_scripts', 'my_enqueue_woocommerce_assets', 10 );
如果后续需要新增更多页面判断,想要逻辑更简洁,也可以用数组判断的写法:
function my_enqueue_woocommerce_assets() { $is_target_page = [ is_shop(), is_product(), is_product_category() ]; if ( in_array( true, $is_target_page, true ) ) { // 加载资源逻辑 } } add_action( 'wp_enqueue_scripts', 'my_enqueue_woocommerce_assets', 10 );
二、反向判断错误原因及正确写法
你之前的反向判断逻辑错误是因为逻辑运算符用错了,根据布尔逻辑的德摩根定律:!(A || B || C) 等价于 !A && !B && !C
你原来写的!is_shop() or !is_product() or !is_product_category()逻辑是「不是商店页 或者 不是单品页 或者 不是分类页」,这个条件几乎所有页面都会满足(因为不可能有页面同时是商店、单品、分类三个页面),所以不会生效。
你要实现的「不在这三个页面就返回」的正确写法有两种:
写法1(直接取非判断):
function not_needed() { // 只要不是三个页面中的任意一个,就直接返回 if ( ! is_shop() && ! is_product() && ! is_product_category() ) { return; } // 后续是需要在这三个页面执行的逻辑 }
写法2(更直观的括号包裹写法):
function not_needed() { if ( ! ( is_shop() || is_product() || is_product_category() ) ) { return; } // 后续是需要在这三个页面执行的逻辑 }
内容的提问来源于stack exchange,提问作者PlainH2O
相关产品推荐
相关产品推荐

