woocommerce_order_item_name 过滤器挂钩中无法识别自定义分类法

Custom taxonomy not recognized in woocommerce_order_item_name filter hook

我在 WooCommerce 网站上遇到一些不一致的行为。

我已将自定义分类法添加到产品 post 类型中,名为 'product_brand':

add_action('init', 'register_taxonomies');

function register_taxonomies() {
    $labels = array(
        'name' => _x('Brands', 'taxonomy general name'),
        'singular_name' => _x('Brand', 'taxonomy singular name'),
        'search_items' => __('Søk Brands'),
        'all_items' => __('Alle Brands'),
        'parent_item' => __('Parent Brand'),
        'parent_item_colon' => __('Parent Brand:'),
        'edit_item' => __('Redigere Brand'),
        'update_item' => __('Update Brand'),
        'add_new_item' => __('Legg New Brand'),
        'new_item_name' => __('Nye Brand Navn'),
        'menu_name' => __('Brands'),
    );

    $args = array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'show_admin_column' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'product_brand'),
    );

    register_taxonomy('product_brand', array('product'), $args);
}

我想在“新订单”电子邮件消息中的每个产品名称前显示所选的 product_brand 字词。
答案代码的启发,我添加了以下代码:

function wc_get_product_brand( $product_id ) {
    return implode( ', ', wp_get_post_terms( $product_id, 'product_brand', ['fields' => 'names'] ));
}

// Display product brand in order pages and email notification
add_filter( 'woocommerce_order_item_name', function( $product_name, $item ) {
    $product = $item->get_product();        // The WC_Product Object
    $permalink = $product->get_permalink(); // The product permalink

    if( taxonomy_exists( 'product_brand' ) ) {
        if( $brand = wc_get_product_brand( $item->get_product_id() ) ) {
            if ( is_wc_endpoint_url() )
                return sprintf( '<a href="%s">%s %s</a>', esc_url( $permalink ), $brand, $product->get_name() );
            else
                return  $brand . ' - ' . $product_name;
        }
    } else {
        return $product_name;
    }

    
    return $product_name;
}, 10, 2 );

这在我使用支票付款的暂存站点上运行良好。但是在我使用外部支付网关 (Klarna) 的实时站点上,找不到分类法。 taxonomy_exists( 'product_brand' ) 正在返回 false

但是,如果我从订单管理页面手动重新发送“新订单”消息,则会找到分类法并成功显示术语。

这可能是什么原因,我该如何解决?

站点在 WPEngine 上 运行。

原来是 Klarna 插件导致了“缺少分类法”的问题。在联系了插件开发者后,https://krokedil.se/,我得到了解决方案。

我必须将低于 10 的优先级添加到 add_action('init', 'register_taxonomies');-调用。

因此: add_action('init', 'register_taxonomies', 9);