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);
我在 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);