如何解决动态填充两个 Gravityform 选择菜单
我有两个使用 Gravityforms 构建的选择菜单,我正在尝试使用下面的过滤器来动态填充 WooCommerce 订单 ID 和 WooCommerce 产品。第一个 foreach 循环按预期工作。我以为我可以复制第二个选择菜单的循环。我在非重力形式中尝试过这些查询。
我怀疑它是我在第二个循环中使用的变量名称?
add_filter('gform_pre_render','populate_rma_dropdowns');
add_filter( 'gform_pre_validation','populate_rma_dropdowns' );
add_filter( 'gform_admin_pre_render','populate_rma_dropdowns' );
add_filter( 'gform_pre_submission_filter','populate_rma_dropdowns' );
function populate_rma_dropdowns( $form ) {
if ( $form['title'] != "RMA" ) return $form;
foreach ( $form['fields'] as &$field ) {
if ( $field->type != 'select' || strpos( $field->cssClass,'order-list' ) === false ) {
continue;
}
$query = new WC_Order_Query( array(
'limit' => -1,'orderby' => 'date','order' => 'DESC','return' => 'ids',) );
$orders = $query->get_orders();
$choices = array(array('text' => 'Please find your order number','value' => 0 ));
foreach ( $orders as $order ) {
$choices[] = array( 'text' => $order,'value' => $order,'isSelected' => false );
}
$field['choices'] = $choices;
}
foreach ( $form['fields'] as &$field2 ) {
if ( $field2->type != 'select' || strpos( $field2->cssClass,'product-list' ) === false ) {
continue;
}
$args2 = array( 'post_type' => 'product','posts_per_page' => 100);
$products = get_posts( $args2 );
$choices2 = array(array('text' => 'Please select product','value' => 0 ));
foreach ( $products as $product ) {
$choices2[] = array( 'text' => $product->post_title,'value' => $product->post_title,'isSelected' => false );
}
$field2['choices2'] = $choices2;
}
return $form;
}
解决方法
您似乎在第二个循环中犯了一个小错字。您正在设置 $field2['choices2']
而不是 $field2['choices']
我已经解决了这个问题:在第二个 foreach 循环中,我向 &$field 数组元素添加了一个数字
foreach ( $form['fields'] as &$field ) {
...
}
@Marc 关于他的建议也是正确的。两个下拉菜单现在都可以按要求工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。