我使用WPML作为翻译插件和Woocommerce。我的产品只有英文版,其他语言可以追溯到没有翻译的版本。但是,我面临着产品类别问题。如果网站语言是英语,例如在Cat A我有4个产品。计数显示正确4.如果,我切换到意大利语,计数为0.我已经检查过WPML支持。他们建议我使用自定义代码。因此,我创建了一个短代码来显示计数器的所有类别,因为这是Woocmmerce [product_categories]的官方短代码。使用我自己的短代码显示类别,但我仍有同样的问题。这是我的代码。我有一个if(ICL语言代码=='')然后获得默认的类别代码。我测试了这个,我得到了默认的类别ID。使用类别代码我尝试获取术语计数。但是,似乎有些不对劲。即使$ default_lang_id是英文的类别ID,计数器也会回归到当前语言,例如意大利。我需要直接从terms_taxonomies - >提供wp查询吗?算?
function prod_categories() {
$get_featured_cats = array(
'taxonomy' => 'product_cat',
'orderby' => 'asc',
'show_count' => '1',
'hide_empty' => '0',
'include' => $cat_array
);
$all_categories = get_categories( $get_featured_cats );
$j = 1;
foreach ($all_categories as $cat) {
$cat_id = $cat->term_id;
$cat_link = get_category_link( $cat_id );
$thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true ); // Get Category Thumbnail
$image = wp_get_attachment_url( $thumbnail_id );
if(ICL_LANGUAGE_CODE=='de' || ICL_LANGUAGE_CODE=='fr' || ICL_LANGUAGE_CODE=='it'){
$default_lang_id = icl_object_id( $cat_id, 'product_cat', true, 'en' );
$default_lang_count = get_term( $default_lang_id, 'product_cat' );
};
if ( $image ) {
echo '<div style="float:left;margin:10px;"><a href="' . $cat_link . '"><img src="' . $image . '" alt="" /><br><center>' . $cat->name . ' ('. $cat->count .')</center></a>'.$default_lang_id. ' ' .'('.$default_lang_count->count.')</div>';
}
$j++;
}
// Reset Post Data
wp_reset_query();
}
add_shortcode( 'prod_categories', 'prod_categories' );
答案 0 :(得分:0)
自4.8版本以来,WordPress支持get_terms函数的“suppress_filter”参数。 所以,我想错过的点是过滤器。此参数应强制函数忽略“WPML存在因子”并按原样获取所有类别数据。
尝试添加并再次测试:
$get_featured_cats = array(
'taxonomy' => 'product_cat',
'orderby' => 'asc',
'show_count' => '1',
'hide_empty' => '0',
'include' => $cat_array,
'suppress_filter'=>true
);
替代方式:(通过SQL查询)
//$default_lang_id = icl_object_id( $cat_id, 'product_cat', true, 'en' );
//$default_lang_count = get_term( $default_lang_id, 'product_cat' );
global $wpdb;
$default_lang_count=$wpdb->get_var("select count from
$wpdb->term_taxonomy
where term_id=".esc_sql($cat_id));