मैं उपयोगकर्ताओं को एक रूप में उत्पादों का चयन करने देना चाहता हूं। ऐसा करने के लिए, मुझे प्रकाशित WooCommerce उत्पादों के साथ एक फॉर्म को गतिशील रूप से पॉप्युलेट करने की आवश्यकता है।

मुझे WooCommerce उत्पादों के साथ एक चुनिंदा फ़ील्ड को पॉप्युलेट करने का समाधान मिला। लेकिन उपयोगकर्ता प्रति उत्पाद मात्रा का चयन करने में सक्षम होना चाहिए। इसलिए मुझे सूची फ़ील्ड का उपयोग करने और सूची फ़ील्ड के कक्षों को पॉप्युलेट करने की आवश्यकता है।

यहां बताया गया है कि सूची फ़ील्ड कैसा दिखता है:

enter image description here

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;
}

दुर्भाग्य से मुझे नहीं पता कि सूची फ़ील्ड की कोशिकाओं को गतिशील रूप से कैसे पॉप्युलेट करना है।

मुझे एक उदाहरण मिला कि सूची फ़ील्ड को कैसे पॉप्युलेट किया जाए: https://docs.gravityforms.com/ gform_field_value_parameter_name/#list-field

लेकिन मैं यह नहीं समझ सका कि इन दो स्निपेट्स को कैसे जोड़ा जाए: /

add_filter( 'gform_field_value_list', 'populate_list' );
function populate_list( $value ) {
  $list_array = array(
            array(
                'Column 1' => 'row1col1',
                'Column 2' => 'row1col2',
                'Column 3' => 'row1col3',
            ),
            array(
                'Column 1' => 'row2col1',
                'Column 2' => 'row2col2',
                'Column 3' => 'row2col3'
            ),
  );
    return $list_array;
}
0
Cray 7 अप्रैल 2020, 21:32

1 उत्तर

सबसे बढ़िया उत्तर

अगर किसी को दिलचस्पी है, तो मेरा कामकाजी कोड यहां है।

यहाँ से कुछ बड़ी मदद के साथ: 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;

}
0
Cray 9 अप्रैल 2020, 04:35