为了账号安全,请及时绑定邮箱和手机立即绑定

WordPress:使用 Gravity Forms 中的 WooCommerce 产品填充列表字段

WordPress:使用 Gravity Forms 中的 WooCommerce 产品填充列表字段

PHP
元芳怎么了 2022-12-11 16:12:53
我想让用户在一个表单中选择产品。为此,我需要使用已发布的 WooCommerce 产品动态填充表单。我找到了一个用 WooCommerce 产品填充选择字段的解决方案。但是用户应该能够选择每种产品的数量。因此我需要使用列表字段并填充列表字段的单元格。以下是列表字段的外观:SKU 和标题字段应动态填充。数量字段供用户填写。这是我使用 WooCommerce 产品数据填充选择字段的代码:add_filter( 'gform_pre_render_5', 'populate_posts' );add_filter( 'gform_pre_validation_5', 'populate_posts' );add_filter( 'gform_pre_submission_filter_5', 'populate_posts' );add_filter( 'gform_admin_pre_render_5', 'populate_posts' );function populate_posts( $form ) {    foreach ( $form['fields'] as &$field ) {        if ( $field->type != 'select' || strpos( $field->cssClass, 'populate-posts' ) === false ) {            continue;        }        // you can add additional parameters here to alter the posts that are retrieved        // more info: http://codex.wordpress.org/Template_Tags/get_posts        $posts = get_posts( 'numberposts=-1&post_status=publish&post_type=product' );        $choices = array();        foreach ( $posts as $post ) {            $choices[] = array( 'text' => $post->post_title, 'value' => $post->post_title );        }        // update 'Select a Post' to whatever you'd like the instructive option to be        $field->placeholder = 'Select a product';        $field->choices = $choices;    }    return $form;}
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

只需稍微修改您的代码,将第一列作为选择字段,并动态填充产品名称,就不会显示很长的列表。


add_filter( 'gform_column_input_4_11_1', 'set_column', 10, 5 );

function set_column( $input_info, $field, $column, $value, $form_id ) {

global $current_user;

get_currentuserinfo();


$statuses = array('publish', 'draft');


// Args on the main query for WC_Product_Query

$args = [

    'status'    => $statuses,

    'orderby'   => 'name',

    'order'     => 'ASC',

    'limit'     => -1,

];


$vendor_products = wc_get_products($args);


$choices = array();


foreach ($vendor_products as $key => $product) {


    if ($product->get_type() == "variable") {


        // Args on product variations query for a variable product using a WP_Query

        $args2 = array( 

            'post_parent' => $product->get_id(), 

            'post_type'   => 'product_variation', 

            'orderby'     => array( 'menu_order' => 'ASC', 'ID' => 'ASC' ), 

            'fields'      => 'ids', 

            'post_status' => $statuses, 

            'numberposts' => -1, 

        ); 


        foreach ( get_posts( $args2 ) as $child_id ) {

            // get an instance of the WC_Variation_product Object

            $variation = wc_get_product( $child_id ); 


            if ( ! $variation || ! $variation->exists() ) {

                continue;

            }

            


            $choices[] = array( 'text' => $product->get_name() . " - " . $child_id, 'value' => $product->get_name() . " - " . $child_id );

        }


    } else {

        $choices[] = array( 'text' => $product->get_name(), 'value' => $product->get_name() );



    }


}


return array( 'type' => 'select', 'choices' => $choices );

}


查看完整回答
反对 回复 2022-12-11
?
茅侃侃

TA贡献1842条经验 获得超22个赞

如果有人感兴趣,这是我的工作代码。


从这里得到一些很大的帮助:https://stackoverflow.com/a/61098114/1788961


add_filter( 'gform_field_value_list', 'populate_list' );

function populate_list( $value ) {


    global $current_user;

    get_currentuserinfo();


    $statuses = array('publish', 'draft');


    // Args on the main query for WC_Product_Query

    $args = [

        'status'    => $statuses,

        'orderby'   => 'name',

        'order'     => 'ASC',

        'limit'     => -1,

    ];


    $vendor_products = wc_get_products($args);


    $list_array = array();


    foreach ($vendor_products as $key => $product) {


        if ($product->get_type() == "variable") {


            // Args on product variations query for a variable product using a WP_Query

            $args2 = array( 

                'post_parent' => $product->get_id(), 

                'post_type'   => 'product_variation', 

                'orderby'     => array( 'menu_order' => 'ASC', 'ID' => 'ASC' ), 

                'fields'      => 'ids', 

                'post_status' => $statuses, 

                'numberposts' => -1, 

            ); 


            foreach ( get_posts( $args2 ) as $child_id ) {

                // get an instance of the WC_Variation_product Object

                $variation = wc_get_product( $child_id ); 


                if ( ! $variation || ! $variation->exists() ) {

                    continue;

                }


                $list_array[] = array(

                    'SKU'      => $variation->get_sku(),

                    'Name'     => $product->get_name() . " - " . $child_id,

                );

            }


        } else {


            $list_array[] = array(

                'SKU'      => $product->get_sku(),

                'Name'     => $product->get_name(),

            );


        }


    }


    return $list_array;


}



查看完整回答
反对 回复 2022-12-11
  • 2 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号