php - 以默认语言获取产品类别的术语计数(使用 WPML)
问题描述
我使用 WPML 作为翻译插件和 Woocommerce。我的产品只有英文,其他语言没有翻译就回退到这些。但是,我面临产品类别计数的问题。如果网站语言是英语,例如在 Cat AI 中有 4 个产品。计数正确显示为 4。如果我切换到意大利语,则计数为 0。我已经与 WPML 支持进行了检查。他们建议我使用自定义代码。因此,我创建了一个简码来显示带有计数器的所有类别,就像 Woocmmerce [product_categories] 的官方简码一样。使用我自己的简码显示类别,但我仍然有同样的问题。这是我的代码。我有一个 if (ICL Language Code == '') 然后获取默认类别代码。我对此进行了测试,并获得了默认类别 ID。使用类别代码,我尝试获取术语计数。不过,似乎有些不对劲。即使 $default_lang_id 是英语的类别 ID,计数器也会退回到当前语言,例如意大利语。我是否需要直接从 terms_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));
推荐阅读
- css - 如何为按钮而不是方形制作圆形渐变边框?
- vue.js - 使用chartJs在yAxis中标签太长
- python - 单击电报中的菜单按钮后显示文本消息
- reactjs - 使用 gatsbyjs 将来自 graphql 查询的数据修改为反应组件在 gatsby 开发中有效,但在 gatsby 构建中中断
- python-3.x - 如何解决此未知标签类型错误?
- android - 如何从列、行获取索引
- apache-kafka - Kafka的Replica处理机制?
- css - flex中的角度项目在使它们成为组件后没有固定的高度
- android-studio - 在不重启 Android Studio 的情况下刷新自定义 template.xml
- python - 如何使用 OpenCV 用一些 Python 代码拼接这两个图像?