Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Polylang语言筛选与商业相关的产品_Php_Wordpress_Woocommerce_Product - Fatal编程技术网

Php 使用Polylang语言筛选与商业相关的产品

Php 使用Polylang语言筛选与商业相关的产品,php,wordpress,woocommerce,product,Php,Wordpress,Woocommerce,Product,我正在使用插件来创建多语言网站 将WooCommerce与polylang一起使用需要对每种语言的每种产品进行复制,因此假设我有希伯来语和英语,这意味着每种产品有2个副本 它可以与Woocommerce插件配合使用,但当我在产品页面的末尾显示“相关产品”时,它会将英语和希伯来语的产品混合在一起 我希望按网站当前语言过滤相关产品(if(get_locale()==“en_US”)-检查网站当前语言环境状态,否则将表示希伯来语) 以下是我尝试过的,但我在按语言过滤产品方面遇到了困难: add_fi

我正在使用插件来创建多语言网站

将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;
}
如何按语言筛选与商业相关的产品部分

编辑

因此,在对注释进行了一点研究和帮助后,我发现
'lang'=>'en'
参数确实存在,但即使我使用它,相关产品的语言显示也没有变化。 有什么想法吗?

您可以尝试以下代码:

$related_posts = get_posts( array(
    'orderby'        => 'rand',
    'posts_per_page' => '4',
    'post_type'      => 'product',
    'meta_query'     => $meta_query,
    'lang'           => 'en'
) );

if ($related_posts) {
    foreach ($related_posts as $post) {
        setup_postdata($post);
        // something like <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    }
}

wp_reset_postdata();
$related_posts=获取_posts(数组)(
'orderby'=>'rand',
“每页帖子数”=>“4”,
“post_类型”=>“产品”,
“meta\u query”=>$meta\u query,
“lang”=>“en”
) );
if(相关职位){
foreach(相关职位为$post){
设置_postdata($post);
//类似于
  • } } wp_reset_postdata();
    此代码正确返回我的网站上所选语言的代码

    您可以尝试以下代码:

    $related_posts = get_posts( array(
        'orderby'        => 'rand',
        'posts_per_page' => '4',
        'post_type'      => 'product',
        'meta_query'     => $meta_query,
        'lang'           => 'en'
    ) );
    
    if ($related_posts) {
        foreach ($related_posts as $post) {
            setup_postdata($post);
            // something like <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        }
    }
    
    wp_reset_postdata();
    
    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;
    }
    
    $related_posts=获取_posts(数组)(
    'orderby'=>'rand',
    “每页帖子数”=>“4”,
    “post_类型”=>“产品”,
    “meta\u query”=>$meta\u query,
    “lang”=>“en”
    ) );
    if(相关职位){
    foreach(相关职位为$post){
    设置_postdata($post);
    //类似于
  • } } wp_reset_postdata();
    此代码在我的网站上正确返回所选语言的代码

    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\u filters
    有一种方法可以使get\u posts缓存结果。但是,默认情况下,suppress\u filters选项为true,但如果将其设置为false,WordPress中的缓存机制将完成其工作,结果将保存以备以后使用


    suppress\u filters
    有一种方法可以使get\u posts缓存结果。但是,默认情况下,suppress\u filters选项为true,但如果将其设置为false,WordPress中的缓存机制将执行其工作,并且结果将保存以备以后使用。

    在使用自定义WordPress REST Api端点以按所选语言或设备语言获取帖子时,这是有效的。看看能不能帮上忙

    function mycustomplugin_posts($params) {
        // get the url params
    
        $page = $params->get_param('page') ? $params->get_param('page') : 0;
        $per_page = $params->get_param('per_page') ? $params->get_param('per_page') : 10;
        $offset = $params->get_param('offset') ? $params->get_param('offset') : 0;
        $order = $params->get_param('order') ? $params->get_param('order') : 'desc';
        $order_by = $params->get_param('order_by') ? $params->get_param('order_by') : 'date';
        $lang = array_search($params->get_param('lang'),polylang_json_api_languages(), true) ? $params->get_param('lang') : pll_default_language();
        
        $args = [
            'post_type' => 'post',
            'page' => $page,
            'numberposts' => $per_page,
            'offset' => $offset,
            'order' => $order,
            'orderby' => $order_by,
            'tax_query' => [
                [
                    'taxonomy'  => 'language',
                    'field'     => 'slug',
                    'terms'     => $lang
                ]
            ]
        ];
    
        $posts = get_posts($args);
        $data = [];
        $i = 0;
    
        foreach($posts as $post) {
            
            // Extract the post data
    
            $data[$i]['id'] = $post->ID;
            $data[$i]['title'] = $post->post_title;
            $data[$i]['content'] = $post->post_content;
            $data[$i]['excerpt'] = e42_the_short_content($post->post_content, 300);
            $data[$i]['slug'] = $post->post_name;
            $data[$i]['date'] = $post->post_date;
            $data[$i]['link'] = get_permalink($post->ID);
            $data[$i]['author'] = get_the_author_meta('display_name', $post->post_author);
            $data[$i]['categories'] = array();
            $data[$i]['featured_image']['thumbnail'] = get_the_post_thumbnail_url($post->ID, 'thumbnail');
            $data[$i]['featured_image']['medium'] = get_the_post_thumbnail_url($post->ID, 'medium');
            $data[$i]['featured_image']['large'] = get_the_post_thumbnail_url($post->ID, 'large');
            
            foreach(get_the_category($post->ID) as $category){
                array_push($data[$i]['categories'],$category->term_id);
            }
            $i++;
        }
        
        // Create the response object
    
        $response = new WP_REST_Response( $data );
    
        // Add a custom status code
    
        $response->set_status( 200 );
        return $response;
    }
    

    在使用自定义WordPress REST Api端点以按所选语言或设备语言获取帖子时,这起到了作用。看看能不能帮上忙

    function mycustomplugin_posts($params) {
        // get the url params
    
        $page = $params->get_param('page') ? $params->get_param('page') : 0;
        $per_page = $params->get_param('per_page') ? $params->get_param('per_page') : 10;
        $offset = $params->get_param('offset') ? $params->get_param('offset') : 0;
        $order = $params->get_param('order') ? $params->get_param('order') : 'desc';
        $order_by = $params->get_param('order_by') ? $params->get_param('order_by') : 'date';
        $lang = array_search($params->get_param('lang'),polylang_json_api_languages(), true) ? $params->get_param('lang') : pll_default_language();
        
        $args = [
            'post_type' => 'post',
            'page' => $page,
            'numberposts' => $per_page,
            'offset' => $offset,
            'order' => $order,
            'orderby' => $order_by,
            'tax_query' => [
                [
                    'taxonomy'  => 'language',
                    'field'     => 'slug',
                    'terms'     => $lang
                ]
            ]
        ];
    
        $posts = get_posts($args);
        $data = [];
        $i = 0;
    
        foreach($posts as $post) {
            
            // Extract the post data
    
            $data[$i]['id'] = $post->ID;
            $data[$i]['title'] = $post->post_title;
            $data[$i]['content'] = $post->post_content;
            $data[$i]['excerpt'] = e42_the_short_content($post->post_content, 300);
            $data[$i]['slug'] = $post->post_name;
            $data[$i]['date'] = $post->post_date;
            $data[$i]['link'] = get_permalink($post->ID);
            $data[$i]['author'] = get_the_author_meta('display_name', $post->post_author);
            $data[$i]['categories'] = array();
            $data[$i]['featured_image']['thumbnail'] = get_the_post_thumbnail_url($post->ID, 'thumbnail');
            $data[$i]['featured_image']['medium'] = get_the_post_thumbnail_url($post->ID, 'medium');
            $data[$i]['featured_image']['large'] = get_the_post_thumbnail_url($post->ID, 'large');
            
            foreach(get_the_category($post->ID) as $category){
                array_push($data[$i]['categories'],$category->term_id);
            }
            $i++;
        }
        
        // Create the response object
    
        $response = new WP_REST_Response( $data );
    
        // Add a custom status code
    
        $response->set_status( 200 );
        return $response;
    }
    

    不定期使用WP,但您应该在
    get\u posts
    函数中的该数组中进行区分。我假设这些键/值类似于SQL的WHERE,因此您应该检查如何添加该选择(即伪代码:
    lang=>en'
    )。这只是我要尝试的示例,并不是说我在使用WP或polylang。@我尝试过的Tpojka不会给我任何错误,但也不会给我任何结果:\n你还有其他想法吗?在你的get_帖子中尝试“suppress_filters”=>false,arg()function@mujuonly非常感谢。你解决了这个问题,你能写一个答案来解释suppress_filters的作用吗?不定期使用WP,但你应该在
    get_posts
    函数中的数组中进行区分。我假设这些键/值类似于SQL的WHERE,因此您应该检查如何添加该选择(即伪代码:
    lang=>en'
    )。这只是我要尝试的示例,并不是说我在使用WP或polylang。@我尝试过的Tpojka不会给我任何错误,但也不会给我任何结果:\n你还有其他想法吗?在你的get_帖子中尝试“suppress_filters”=>false,arg()function@mujuonly非常感谢。你解决了它,你能写下答案解释一下suppress_过滤器的作用吗?嘿,Pavel,这是我的网站链接:正如你所看到的,它不起作用,我想钩子可能过时了?因为什么都没有改变…我看到参数suppress\u filters可以帮助您解决这个问题。你可以把它和我的代码结合起来,得到完美的查询)嘿,帕维尔,这是我的网站链接:正如你所看到的,它不起作用,我想钩子可能过时了?因为什么都没有改变…我看到参数suppress\u filters可以帮助您解决这个问题。您可以将其与我的代码相结合以获得完美的查询)