php - 按 Polylang 语言过滤 WooCommerce 相关产品
问题描述
我正在使用polylang插件来拥有多语言网站。
将 WooCommerce 与 polylang 一起使用需要为每种语言复制每种产品,因此假设我有希伯来语和英语,这意味着每种产品有 2 次重复。
它适用于 Woocommerce 插件,但是当我在产品页面的末尾显示“相关产品”时,它会将英语和希伯来语的产品混合在一起。
我希望通过网站当前语言过滤相关产品(if(get_locale() == 'en_US')
- 检查网站当前语言环境状态,否则将代表希伯来语)。
这是我尝试过的,但我在按语言过滤产品的部分卡住了:
add_filter( 'woocommerce_product_related_posts', 'custom_related_products' );
function custom_related_products($product){
global $woocommerce;
// Meta query
$meta_query = array();
$meta_query[] = $woocommerce->query->visibility_meta_query();
$meta_query[] = $woocommerce->query->stock_status_meta_query();
$meta_query = array_filter( $meta_query );
// Get the posts
$related_posts = get_posts( array(
'orderby' => 'rand',
'posts_per_page' => '4',
'post_type' => 'product',
'fields' => 'ids',
'meta_query' => $meta_query
) );
if ( $related_posts->have_posts() ) {
while ( $related_posts->have_posts() ) : $related_posts->the_post();
if(pll_get_post_language(get_the_ID())){
//Not sure its the right approach for this..
}
endwhile;
}
$related_posts = array_diff( $related_posts, array( $product->id ), $product->get_upsells() );
return $related_posts;
}
如何按语言过滤 Woocommerce 相关产品部分?
编辑
所以经过一些研究和评论中的帮助后,我发现这个'lang' => 'en'
论点确实存在,但即使我使用它,相关产品的语言显示也没有变化。有任何想法吗?
解决方案
add_filter( 'woocommerce_product_related_posts', 'custom_related_products' );
function custom_related_products($product){
global $woocommerce;
// Meta query
$meta_query = array();
$meta_query[] = $woocommerce->query->visibility_meta_query();
$meta_query[] = $woocommerce->query->stock_status_meta_query();
$meta_query = array_filter( $meta_query );
// Get the posts
$related_posts = get_posts( array(
'orderby' => 'rand',
'posts_per_page' => '4',
'post_type' => 'product',
'fields' => 'ids',
'meta_query' => $meta_query,
'suppress_filters' => false
) );
if ( $related_posts->have_posts() ) {
while ( $related_posts->have_posts() ) : $related_posts->the_post();
if(pll_get_post_language(get_the_ID())){
//Not sure its the right approach for this..
}
endwhile;
}
$related_posts = array_diff( $related_posts, array( $product->id ), $product->get_upsells() );
return $related_posts;
}
suppress_filters
有一种方法可以让 get_posts 缓存结果,但是,suppress_filters 选项默认为 true,但如果将其设置为 false,WordPress 内部的缓存机制将完成它们的工作,并将结果保存以备后用。
推荐阅读
- c# - wpf 改变视图 mvvm 的有效方法
- angular - 如何在Angular中为对象赋值
- python - scikit-learn 中 TF-IDF 向量的组特征
- javascript - 打印出值后等待 5 秒的 Promise 方法
- amazon-web-services - 具有动态配置的 aws 自动缩放
- perl - 如何使用 Mojo 进行内部重定向?
- c# - 如何通过快捷方式访问当前项目解决方案?
- node.js - “位置 0 处 JSON 中的意外标记 u”
- android - 非法处理指令目标(“xml”);尝试构建应用程序时
- database - 同时插入数据,而新行应根据最后插入的行计算