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

我想让用户在一个表单中选择产品。为此,我需要使用已发布的 WooCommerce 产品动态填充表单。

我找到了一个用 WooCommerce 产品填充选择字段的解决方案。但是用户应该能够选择每种产品的数量。因此我需要使用列表字段并填充列表字段的单元格。

以下是列表字段的外观:


http://img2.mukewang.com/639592da00019d1a06550058.jpg

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;

}


元芳怎么了
浏览 196回答 2
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 );}

茅侃侃

如果有人感兴趣,这是我的工作代码。从这里得到一些很大的帮助:https://stackoverflow.com/a/61098114/1788961add_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;}
打开App,查看更多内容
随时随地看视频慕课网APP