我使用 WPML 作为翻译插件和 Woocommerce。我的产品只有英文版,其他语言都没有翻译。但是,我面临着产品类别计数的问题。如果网站语言是英语,例如在 Cat AI 中,则有 4 个产品。计数显示正确,为 4。如果我切换到意大利语,则计数为 0。我已经检查过 WPML 支持。他们建议我使用自定义代码。因此,我创建了一个短代码来显示所有类别的计数器,就像 Woocmmerce [product_categories] 的官方短代码一样。使用我自己的简码显示类别,但我仍然遇到同样的问题。这是我的代码。我有一个 if (ICL Language Code == '') 然后获取默认类别代码。我对此进行了测试,并获得了默认的类别 ID。使用类别代码,我尝试获取术语计数。然而,似乎有些不对劲。即使 $default_lang_id 是英语的类别 ID,计数器也会回退到当前语言,例如意大利语。我是否需要直接从 term_taxonomies -> count 通过 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' );
由于 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));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句