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