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
обратный звонок полностью.Однако без тщательного изучения кода я не знаю, будет ли это возможно.