You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查WooCommerce产品属性是否启用存档页?

解决方案

要实现只清除启用了存档页的WooCommerce产品属性术语缓存,核心是先判断术语所属的产品属性(自定义分类法)是否开启了存档页,再决定是否加入缓存清除列表。

实现步骤与代码示例

  1. 获取目标产品的所有属性术语
  2. 遍历每个术语,检查其所属产品属性的存档页状态
  3. 仅将启用存档页的术语链接加入缓存清除列表
// 假设 $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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:43:15