如何设置仅针对用户正在使用的当前语言的国家/地区显示的产品费用
How to set product fees displayed only for a country in curent language that user is using
我正在使用插件 "WooCommerce Product Fees" 为产品添加自定义费用。我想将这些自定义字段设置为仅针对一个国家/地区显示。
* Check if a product contains fee data.
*
* @param int $id Product ID.
* @return bool True or false based on existance of custom meta.
*/
public function product_contains_fee_data( $id ) {
$fee_name = get_post_meta( $id, 'product-fee-name', true );
$fee_amount = get_post_meta( $id, 'product-fee-amount', true );
if ( '' !== $fee_name && '' !== $fee_amount && $fee_amount > 0 ) {
return true;
}
return false;
}
/////////////////**
* Get all the fees.
*
* @param object $cart WC Cart object.
* @return array $fees An array of fees to be added.
*/
public function get_fees( $cart ) {
$fees = array();
if ( $this->maybe_remove_fees_for_coupon( $cart ) ) {
return $fees;
}
foreach( $cart->get_cart() as $cart_item => $item ) {
// Get the data we need from each product in the cart.
$item_data = array(
'id' => $item['data']->get_id(),
'variation_id' => $item['variation_id'],
'parent_id' => $item['data']->get_parent_id(),
'qty' => $item['quantity'],
'price' => $item['data']->get_price()
);
$fee = $this->get_fee_data( $item_data );
if ( $fee ) {
$fee_id = strtolower( $fee['name'] );
$fee_tax_class = $this->get_fee_tax_class( $item['data'] );
if ( array_key_exists( $fee_id, $fees ) && 'combine' === get_option( 'wcpf_name_conflicts', 'combine' ) ) {
$fees[$fee_id]['amount'] += $fee['amount'];
} else {
$fees[$fee_id] = apply_filters( 'wcpf_filter_fee_data', array(
'name' => $fee['name'],
'amount' => $fee['amount'],
'taxable' => ( '_no_tax' === $fee_tax_class ) ? false : true,
'tax_class' => $fee_tax_class
), $item_data );
}
}
}
return $fees;
}
我想要完成的是只有当用户来自一个国家/地区时才必须显示此字段,因此在产品页面上不得在购物车和结账时显示一个国家/地区。是否可以添加过滤器以从一个国家/地区排除此字段?
提前致谢!!!
** 更新**
我正在尝试以用户当前使用的语言显示“$fee_name”的翻译。现在我的网站是希腊语和英语,我正在使用 wpml,但这个字段没有翻译。我在想是否有一种添加 ICL_LANGUAGE_CODE 和 str_replace 的方法,所以如果用户使用英文网站查看翻译的“$fee_name”。(但它破坏了地点 )。
这是我的代码:
$fee_name = get_post_meta( $id, 'product-fee-name', true );
$fee_amount = get_post_meta( $id, 'product-fee-amount', true );
$fee_name_en = str_replace('product-fee-name', 'Recycling Tax', $fee_name);
$country_code = 'GR'; // <=== Set the country code
$user_country = WC()->customer->get_shipping_country(); // or with get_billing_country(); method too.
if( '' !== $fee_name_en && '' !== $fee_amount && $fee_amount > 0 && $user_country === $country_code && ICL_LANGUAGE_CODE=='en') {
return true;}
else ( '' !== $fee_name && '' !== $fee_amount && $fee_amount > 0 && $user_country === $country_code && ICL_LANGUAGE_CODE=='el') {
return true;
}
return false;
}
非常感谢任何帮助!!
在您的第一个函数中使用以下内容:
public function product_contains_fee_data( $id ) {
$fee_name = get_post_meta( $id, 'product-fee-name', true );
$fee_amount = get_post_meta( $id, 'product-fee-amount', true );
$country_code = 'FR'; // <=== Set the country code
$user_country = WC()->customer->get_shipping_country(); // or with get_billing_country(); method too.
if ( '' !== $fee_name && '' !== $fee_amount && $fee_amount > 0 && $user_country === $country_code ) {
return true;
}
return false;
}
应该可以。
我正在使用插件 "WooCommerce Product Fees" 为产品添加自定义费用。我想将这些自定义字段设置为仅针对一个国家/地区显示。
* Check if a product contains fee data.
*
* @param int $id Product ID.
* @return bool True or false based on existance of custom meta.
*/
public function product_contains_fee_data( $id ) {
$fee_name = get_post_meta( $id, 'product-fee-name', true );
$fee_amount = get_post_meta( $id, 'product-fee-amount', true );
if ( '' !== $fee_name && '' !== $fee_amount && $fee_amount > 0 ) {
return true;
}
return false;
}
/////////////////**
* Get all the fees.
*
* @param object $cart WC Cart object.
* @return array $fees An array of fees to be added.
*/
public function get_fees( $cart ) {
$fees = array();
if ( $this->maybe_remove_fees_for_coupon( $cart ) ) {
return $fees;
}
foreach( $cart->get_cart() as $cart_item => $item ) {
// Get the data we need from each product in the cart.
$item_data = array(
'id' => $item['data']->get_id(),
'variation_id' => $item['variation_id'],
'parent_id' => $item['data']->get_parent_id(),
'qty' => $item['quantity'],
'price' => $item['data']->get_price()
);
$fee = $this->get_fee_data( $item_data );
if ( $fee ) {
$fee_id = strtolower( $fee['name'] );
$fee_tax_class = $this->get_fee_tax_class( $item['data'] );
if ( array_key_exists( $fee_id, $fees ) && 'combine' === get_option( 'wcpf_name_conflicts', 'combine' ) ) {
$fees[$fee_id]['amount'] += $fee['amount'];
} else {
$fees[$fee_id] = apply_filters( 'wcpf_filter_fee_data', array(
'name' => $fee['name'],
'amount' => $fee['amount'],
'taxable' => ( '_no_tax' === $fee_tax_class ) ? false : true,
'tax_class' => $fee_tax_class
), $item_data );
}
}
}
return $fees;
}
我想要完成的是只有当用户来自一个国家/地区时才必须显示此字段,因此在产品页面上不得在购物车和结账时显示一个国家/地区。是否可以添加过滤器以从一个国家/地区排除此字段? 提前致谢!!!
** 更新**
我正在尝试以用户当前使用的语言显示“$fee_name”的翻译。现在我的网站是希腊语和英语,我正在使用 wpml,但这个字段没有翻译。我在想是否有一种添加 ICL_LANGUAGE_CODE 和 str_replace 的方法,所以如果用户使用英文网站查看翻译的“$fee_name”。(但它破坏了地点 )。 这是我的代码:
$fee_name = get_post_meta( $id, 'product-fee-name', true );
$fee_amount = get_post_meta( $id, 'product-fee-amount', true );
$fee_name_en = str_replace('product-fee-name', 'Recycling Tax', $fee_name);
$country_code = 'GR'; // <=== Set the country code
$user_country = WC()->customer->get_shipping_country(); // or with get_billing_country(); method too.
if( '' !== $fee_name_en && '' !== $fee_amount && $fee_amount > 0 && $user_country === $country_code && ICL_LANGUAGE_CODE=='en') {
return true;}
else ( '' !== $fee_name && '' !== $fee_amount && $fee_amount > 0 && $user_country === $country_code && ICL_LANGUAGE_CODE=='el') {
return true;
}
return false;
}
非常感谢任何帮助!!
在您的第一个函数中使用以下内容:
public function product_contains_fee_data( $id ) {
$fee_name = get_post_meta( $id, 'product-fee-name', true );
$fee_amount = get_post_meta( $id, 'product-fee-amount', true );
$country_code = 'FR'; // <=== Set the country code
$user_country = WC()->customer->get_shipping_country(); // or with get_billing_country(); method too.
if ( '' !== $fee_name && '' !== $fee_amount && $fee_amount > 0 && $user_country === $country_code ) {
return true;
}
return false;
}
应该可以。