如果结帐页面中有特定变化,则隐藏付款方式 | Woocommerce
Hide payment method if specific variation is in Checkout Page | Woocommerce
我在我的 WordPress 网站上使用此代码来在 selected 特定产品变体时隐藏支付网关。但是,一旦我插入代码,WordPress 就会从后端显示严重错误。请帮助我如何在我的网站上使用此代码?
产品属性:需要个性化
变量:是|否
我想实现,如果有人 select 有 'Yes' 变体,那么在结帐页面上禁用 COD 选项。或者,如果他们 select 'No' 那么只有 cod 选项可用。
产品页面 URL:https://savvyandgroovy.com/product/prashant/
这是我目前使用的:
add_filter(‘woocommerce_available_payment_gateways’, ‘conditional_payment_gateways’, 10, 1);
function conditional_payment_gateways($available_gateways)
{
$in_cart=false;
foreach(WC()->cart->get_cart_contents() as $key=>$values)
{
// See if there is an attribute called ‘pa_size’ in the cart
// Replace with whatever attribute you want
if(array_key_exists(‘personalization-required’, (array)$values[‘data’]->get_attributes()))
{
foreach($values[‘data’]->get_attributes() as $attribute=>$variation) ;
// Replace ‘small’ with your value.
if($variation==‘Yes’) $in_cart=true; //edited
}
}
if($in_cart)
unset($available_gateways[‘cod’]); // unset ‘cod’
return $available_gateways;
}
您的代码工作正常,但由于您使用的引号而出错。我已将其更新如下:
add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
$in_cart = false;
if ( !empty(WC()->cart) ) {
foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
// See if there is an attribute called ‘pa_size’ in the cart
// Replace with whatever attribute you want
//echo '<pre>';
//print_r($values['data']->get_attributes());
//echo '</pre>';
if (array_key_exists('personalization-required', (array) $values['data']->get_attributes() ) ) {
foreach ($values['data']->get_attributes() as $attribute => $variation);
// Replace ‘small’ with your value.
// if ($variation == 'No') $in_cart = true; //edited
if ($variation == 'Yes') {
$in_cart = true; //edited
// unset($available_gateways['cod']); // unset ‘cod’
}
}
}
if ( $in_cart )
unset($available_gateways['cod']); // unset ‘cod’
}
return $available_gateways;
}
我想实现,如果有人 select 有 'NO' 变体,那么结帐页面上的 cod 选项将被禁用 或者,如果他们 select 'YES' 那么只有cod选项可用。
这不会在您的代码中反向工作,因为您已经编写了 if ($variation == ‘Yes’) $in_cart = true; //edited
,所以您还需要更新它。所以我也更新了上面的代码。
上面的代码不是很完整,因为 OP 希望在两种情况下都隐藏支付网关,所以我只是稍微调整了第一个答案。
add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
if( is_admin() )
return $available_gateways;
$hide_cod = $hide_rest = false;
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
if($cart_item["variation"]["attribute_pa_personalization-required"] === 'no') {
$hide_rest = true;
}
if($cart_item["variation"]["attribute_pa_personalization-required"] === 'yes') {
$hide_cod = true;
}
}
if($hide_cod) {
unset($available_gateways['cod']);
}
if($hide_rest) {
unset($available_gateways['bacs']);
unset($available_gateways['cheque']);
unset($available_gateways['ppcp-gateway']);
//etc
}
return $available_gateways;
}
请记住,如果您将这两种变体都添加到购物车中,您将无法使用任何付款方式。
我在我的 WordPress 网站上使用此代码来在 selected 特定产品变体时隐藏支付网关。但是,一旦我插入代码,WordPress 就会从后端显示严重错误。请帮助我如何在我的网站上使用此代码?
产品属性:需要个性化 变量:是|否
我想实现,如果有人 select 有 'Yes' 变体,那么在结帐页面上禁用 COD 选项。或者,如果他们 select 'No' 那么只有 cod 选项可用。
产品页面 URL:https://savvyandgroovy.com/product/prashant/
这是我目前使用的:
add_filter(‘woocommerce_available_payment_gateways’, ‘conditional_payment_gateways’, 10, 1);
function conditional_payment_gateways($available_gateways)
{
$in_cart=false;
foreach(WC()->cart->get_cart_contents() as $key=>$values)
{
// See if there is an attribute called ‘pa_size’ in the cart
// Replace with whatever attribute you want
if(array_key_exists(‘personalization-required’, (array)$values[‘data’]->get_attributes()))
{
foreach($values[‘data’]->get_attributes() as $attribute=>$variation) ;
// Replace ‘small’ with your value.
if($variation==‘Yes’) $in_cart=true; //edited
}
}
if($in_cart)
unset($available_gateways[‘cod’]); // unset ‘cod’
return $available_gateways;
}
您的代码工作正常,但由于您使用的引号而出错。我已将其更新如下:
add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
$in_cart = false;
if ( !empty(WC()->cart) ) {
foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
// See if there is an attribute called ‘pa_size’ in the cart
// Replace with whatever attribute you want
//echo '<pre>';
//print_r($values['data']->get_attributes());
//echo '</pre>';
if (array_key_exists('personalization-required', (array) $values['data']->get_attributes() ) ) {
foreach ($values['data']->get_attributes() as $attribute => $variation);
// Replace ‘small’ with your value.
// if ($variation == 'No') $in_cart = true; //edited
if ($variation == 'Yes') {
$in_cart = true; //edited
// unset($available_gateways['cod']); // unset ‘cod’
}
}
}
if ( $in_cart )
unset($available_gateways['cod']); // unset ‘cod’
}
return $available_gateways;
}
我想实现,如果有人 select 有 'NO' 变体,那么结帐页面上的 cod 选项将被禁用 或者,如果他们 select 'YES' 那么只有cod选项可用。
这不会在您的代码中反向工作,因为您已经编写了 if ($variation == ‘Yes’) $in_cart = true; //edited
,所以您还需要更新它。所以我也更新了上面的代码。
上面的代码不是很完整,因为 OP 希望在两种情况下都隐藏支付网关,所以我只是稍微调整了第一个答案。
add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
if( is_admin() )
return $available_gateways;
$hide_cod = $hide_rest = false;
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
if($cart_item["variation"]["attribute_pa_personalization-required"] === 'no') {
$hide_rest = true;
}
if($cart_item["variation"]["attribute_pa_personalization-required"] === 'yes') {
$hide_cod = true;
}
}
if($hide_cod) {
unset($available_gateways['cod']);
}
if($hide_rest) {
unset($available_gateways['bacs']);
unset($available_gateways['cheque']);
unset($available_gateways['ppcp-gateway']);
//etc
}
return $available_gateways;
}
请记住,如果您将这两种变体都添加到购物车中,您将无法使用任何付款方式。