Nikunj Kathrotiya
Nikunj Kathrotiya

Reputation: 963

How to add custom field in shipping method using woocommerce wordpress

How to add custom field in shipping method using woocommerce wordpress

Please see my screenshot shipping method screenshot

Upvotes: 3

Views: 3652

Answers (3)

Here is the code for getting the value.

if ( ! function_exists( 'dimative_shipping_method_description' ) ) {
    /**
     * Function will print shipping method description.
     *
     * @param object $method Shipping method object.
     * @param int    $index Shipping method index.
     * @return void
     */
    function dimative_shipping_method_description( $method, $index ) {
        $dimative_method_fields       = get_option( 'woocommerce_' . $method->method_id . '_' . $method->instance_id . '_settings' );
        $dimative_method_allowed_html = array(
            'p'      => array(
                'class' => array(),
            ),
            'strong' => array(),
            'b'      => array(),
            'a'      => array(
                'href' => array(),
            ),
            'span'   => array(
                'class' => array(),
            ),
        );
        // Shipping method custom description.
        if ( $dimative_method_fields['shipping_extra_field_description'] ) {
            ?>
            <div class="method-description"><?php echo wp_kses( $dimative_method_fields['shipping_extra_field_description'], $dimative_method_allowed_html ); ?></div>
            <?php
        }
    }
    add_action( 'woocommerce_after_shipping_rate', 'dimative_shipping_method_description', 1, 2 );
}

Upvotes: 1

brynzovskii
brynzovskii

Reputation: 366

In case if someone is looking how to get the value using @Өлзийбат-Нансалцог code example. I was able to retrieve it this way:

//Get Shipping rate object
//$method->id is the ID of the shipping method. 
//In my case I used that in cart-shipping.php template
$WC_Shipping_Rate = new WC_Shipping_Rate($method->id); 

// Returned value is flat_rate:1
$shipping_rate_id = $WC_Shipping_Rate->get_id(); 

//Replacing : with underscore to have the id in format of flat_rate_1
$shipping_rate_id = str_replace(':', '_', $shipping_rate_id);

//Get the description field value
//Since the value is stored inside options table use get_option() method
get_option('woocommerce_'.$shipping_rate_id.'_settings')['shipping_extra_field_description']

Upvotes: 3

Please try this code.

if ( ! function_exists( 'dimative_shipping_instance_form_fields_filters' ) ) {
    /**
     * Shipping Instance form add extra fields.
     *
     * @param array $settings Settings.
     * @return array
     */
    function dimative_shipping_instance_form_add_extra_fields( $settings ) {
        $settings['shipping_extra_field_title'] = array(
            'title'       => esc_html__( 'Shipping method title', 'zincheco' ),
            'type'        => 'text',
            'placeholder' => esc_html__( 'Please add shipping method title', 'zincheco' ),
            'description' => '',
        );

        $settings['shipping_extra_field_description'] = array(
            'title'       => esc_html__( 'Shipping method description', 'zincheco' ),
            'type'        => 'textarea',
            'placeholder' => esc_html__( 'Please add your shipping method description', 'zincheco' ),
            'description' => '',
        );

        return $settings;
    }

    /**
     * Shipping instance form fields.
     */
    function dimative_shipping_instance_form_fields_filters() {
        $shipping_methods = WC()->shipping->get_shipping_methods();
        foreach ( $shipping_methods as $shipping_method ) {
            add_filter( 'woocommerce_shipping_instance_form_fields_' . $shipping_method->id, 'dimative_shipping_instance_form_add_extra_fields' );
        }
    }
    add_action( 'woocommerce_init', 'dimative_shipping_instance_form_fields_filters' );
}

Upvotes: 9

Related Questions