【问题标题】:Dynamically populate two Gravityform select menus动态填充两个 Gravityform 选择菜单
【发布时间】:2021-05-24 11:38:55
【问题描述】:

我有两个使用 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;
}

【问题讨论】:

    标签: php wordpress gravityforms


    【解决方案1】:

    看起来您在第二个循环中犯了一个小错字。您正在设置 $field2['choices2'] 而不是 $field2['choices']

    【讨论】:

    • 我试过了,但它似乎不起作用:
    【解决方案2】:

    我已经解决了这个问题:在第二个 foreach 循环中,我在 &$field 数组元素中添加了一个数字

    foreach ( $form['fields'] as &$field ) {
    ...
    }
    

    @Marc 关于他的建议也是正确的。现在,两个下拉菜单都可以按要求工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2012-07-24
      • 2023-03-25
      • 1970-01-01
      • 2016-12-20
      相关资源
      最近更新 更多