以默认语言获取产品类别的术语计数(使用WPML)

时间:2018-05-29 12:23:50

标签: php wordpress

我使用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' );

请参阅此处的屏幕截图以便更好地理解 enter image description here

1 个答案:

答案 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));