首页 > 解决方案 > 按 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' 论点确实存在,但即使我使用它,相关产品的语言显示也没有变化。有任何想法吗?

标签: phpwordpresswoocommerceproduct

解决方案


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 内部的缓存机制将完成它们的工作,并将结果保存以备后用。


推荐阅读