问题描述
我的 PHP 技能不是很好,但我通过代码示例学习,因为我不熟悉语法,但在这种情况下我找不到有效的代码示例。
我想在基于另一个字段的值的 gform_pre_submission add_action 期间设置产品选项单选按钮字段的选定值。我已经尝试过这样的事情(还有其他函数和变量是提前在别处定义的,这是一个抽象的)但是这种方法对我不起作用,我想知道我错过了什么:
add_action( 'gform_pre_submission_FORMIDhere','select_radio_button' );
function select_radio_button( $form) {
foreach( $form['fields'] as &$field ) {
if( 53 === $field->id ) {
foreach( $field->choices as &$choice ) {
echo($aag_kg_nummorn.' / /'.$choice['value']);
if( $aag_kg_nummorn == $choice['value'] ) {
echo('Bingo!');
$choice['isSelected'] = true; // <- THIS line doesn't work for me
}
}
}
}
return $form;
}
感谢您提前帮助我。
解决方法
在回答之前我想指出几点
- 您应该修改
$_POST
而不是字段,我看您已经想通了。 -
gform_pre_submission
是一个操作,而不是一个过滤器,因此在此处返回表单不会执行任何操作。
答案
假设您有一个 ID 为 2 的产品选项字段,它有 3 个选项
First Option|1
Second Option|2
Third Option|3
然后代码看起来像
add_action( 'gform_pre_submission_FORMIDhere','select_radio_button' );
function select_radio_button( $form ) {
$_POST['input_2'] = 'New Option|6';
}
我假设您将其与使用其中一种重力形式支付附加组件(如 stripe 或 Paypal)的支付表单一起使用,其中一些附加组件(如 PayPal Checkout)使用 JS 将总价值发送到支付网关之前此操作被触发,因此发送到支付网关的总价值将是用户已经选择的选项的价值,但条目上的总价值将使用您在代码中设置的值。
如果您还需要关于如何从 JS 端覆盖它的帮助,以便您可以将覆盖的值发送到支付网关,我可以将其写在单独的答案中。