wordpress 获取重力表单输入值,作为变量存储在functions.php中

72qzrwbm  于 2023-03-07  发布在  WordPress
关注(0)|答案(2)|浏览(202)

我有一个WooCommerce网站,提供重力表单和一个名为WooCommerce重力表单产品附加组件的插件,允许我向产品添加重力表单。
我想隐藏一个woocommerce支付网关的基础上选择的一个无线电输入的重力形式是对产品。
我知道表单的ID是1,我感兴趣的字段(单选输入)是字段8。
我已经尝试了一些基于Gravity Forms文档以及来自支付网关和StackOverflow帖子的文档的东西。

// remove Partial.ly for hospice selection

add_action('gform_after_submission_1', 'get_hospice_info', 10, 2); 
function get_hospice_info($entry, $form) {
$hospiceinfo = $entry['8'];
}

function hospice_selector_remove_partially($gateway) {
if ($hospiceinfo = "Yes, member under hospice or hospital care") {
$unset = true;
}
if ( $unset == true ) unset( $gateway['partially'] );
return $gateway;
}     add_action('woocommerce_available_payment_gateways','hospice_selector_remove_partially');

我觉得我很接近了。但是它正在删除网关,即使选择了其他无线电选项。
如果可能的话,任何帮助都将不胜感激。

bkhjykvo

bkhjykvo1#

詹娜
get_hospice_info函数设置了一个变量$hospiceinfo,该变量只存在于该特定函数的scope中。因此,$hospiceinfohospice_selector_remove_partially函数中是未定义的。您必须将$hospiceinfo设置为全局变量。
其次,即使变量在hospice_selector_remove_partially函数中可用,该函数第一行中的单个=实际上将变量设置为等于值“Yes,member under hospice or hospital care”。您至少需要两个==来比较该值。这是一个经常被忽视的拼写错误,这就是为什么WP声明Yoda条件是最佳实践的原因。
请参见以下代码,这些代码解决了上面列出的问题,并删除了不必要的代码:

add_action('gform_after_submission_1', 'get_hospice_info', 10, 2); 
function get_hospice_info($entry, $form) {
    global $hospiceinfo;
    $hospiceinfo = $entry['8'];
}

function hospice_selector_remove_partially($gateway) {
    global $hospiceinfo;
    if ("Yes, member under hospice or hospital care" == $hospiceinfo ) {
        unset( $gateway['partially'] );
    }
    return $gateway;
}   
add_action('woocommerce_available_payment_gateways','hospice_selector_remove_partially');

现在,这个答案假设这两个操作都是在同一个页面加载过程中调用的,并且gform_after_submission操作是在woocommerce_available_payment_gateways操作之前调用的,这需要进行验证,以确保上面的代码实际上提供了所需的结果。
理想情况下,您可以在woocommerce_available_payment_gateways操作期间获取hospice_info字段的值,并完全取消gform_after_submission回调。但是,如果不彻底检查代码,我不知道这是否可行。

piok6c0g

piok6c0g2#

你可以遍历所有的购物车项目并得到GravityField的值,然后使用if逻辑来取消设置运输方式

function disable_local_shipping_on_checkout($available_methods)
{

     // Find each product in the cart and add it to the $cart_ids array
     foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
         $cart_product = $values['_gravity_form_lead'];
         
         $field_value   = $cart_product[109]; //109 is the form field ID
         if ($field_value == 'Whatever field value you want') :

            unset($available_methods['wf_shipping_ups:03']); //You can find this by inspecting your shopping cart or checkout.
        endif;
    }
    return $available_methods;
}

相关问题