如何检查WooCommerce产品属性是否启用存档页?
解决方案
要实现只清除启用了存档页的WooCommerce产品属性术语缓存,核心是先判断术语所属的产品属性(自定义分类法)是否开启了存档页,再决定是否加入缓存清除列表。
实现步骤与代码示例
- 获取目标产品的所有属性术语
- 遍历每个术语,检查其所属产品属性的存档页状态
- 仅将启用存档页的术语链接加入缓存清除列表
// 假设 $product 是当前WooCommerce产品对象(可通过 $product = wc_get_product( $post_id ); 获取) $product_terms = wp_get_object_terms( $product->get_id(), get_object_taxonomies( 'product' ), array( 'fields' => 'all' ) ); $cache_clear_urls = array(); foreach ( $product_terms as $term ) { // 获取当前术语对应的产品属性(自定义分类法配置) $taxonomy_config = get_taxonomy( $term->taxonomy ); // 验证分类法存在且已启用存档页 if ( $taxonomy_config && $taxonomy_config->has_archive ) { // 获取术语的公开永久链接 $term_permalink = get_term_link( $term ); // 排除无效链接(如术语未公开或已删除) if ( ! is_wp_error( $term_permalink ) ) { $cache_clear_urls[] = $term_permalink; } } } // 后续使用 $cache_clear_urls 执行缓存清除操作
关键说明
- WooCommerce产品属性本质是带
pa_前缀的自定义分类法,get_taxonomy()返回的配置中,has_archive字段直接对应属性编辑页的「启用存档页」选项。 - 加入
is_wp_error()判断是为了避免因术语状态异常(如未发布)导致的无效URL被加入清除列表。 - 可将此逻辑整合到你的缓存触发钩子中(比如
save_post_product或自定义的缓存刷新动作),实现产品更新时的精准缓存清除。
内容的提问来源于stack exchange,提问作者Mahle26
相关产品推荐
相关产品推荐

