Получить входное значение Gravity Forms, сохранить как переменную в functions.php - PullRequest
0 голосов
/ 01 марта 2019

У меня есть сайт WooCommerce с формами Gravity и плагином WooCommerce Gravity Forms, который позволяет мне добавить форму Gravity Forms к продукту.

Я хотел бы скрыть шлюз платежей woocommerce, основанный на выборе одного из радиовходов в форме Gravity, которая находится на продукте.

Я знаю, что форма имеет идентификатор 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');

Я чувствую, что я рядом.Но он удаляет шлюз, даже если выбрана другая опция радио.

Любая помощь будет принята с благодарностью, если это возможно.

1 Ответ

0 голосов
/ 14 марта 2019

Janna -

Функция get_hospice_info устанавливает переменную $hospiceinfo, которая находится только в области действия этой конкретной функции.Следовательно, $hospiceinfo будет неопределенным в функции hospice_selector_remove_partially.Вам нужно будет установить $hospiceinfo в качестве глобальной переменной.

Во-вторых, даже если переменная была доступна в функции hospice_selector_remove_partially, единственный = в первой строке указанной функции фактически устанавливает переменнуюравно значению «Да, член хосписа или больничного учреждения».Вам понадобится как минимум два == для сравнения значения.Это часто пропускаемая опечатка, поэтому 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.Это должно быть проверено, чтобы убедиться, что приведенный выше код действительно обеспечит желаемый результат.

В идеале вы должны получить значение поля hospice_info во время действия woocommerce_available_payment_gateways и покончить с gform_after_submission обратный звонок полностью.Однако без тщательного изучения кода я не знаю, будет ли это возможно.

...