Add a product custom field to Admin product bulk e

2020-02-10 10:30发布

问题:

I have added a custom field in my WooCommerce products like in this question/answer:
Display a custom product field before short description in WooCommerce.

Is it possible to add this custom field to the product bulk edit special page (accessible from Admin products list page)?

回答1:

Yes it's possible to bulk edit products for your custom field '_text_field' (as in your linked question/answer).

You can add this custom field at the beginning or at the end of edit page.

  • For the beginning you will use this hook: woocommerce_product_bulk_edit_start
  • For the end this one: woocommerce_product_bulk_edit_end

The code (the custom field is at the beginning here):

// Add a custom field to product bulk edit special page
add_action( 'woocommerce_product_bulk_edit_start', 'custom_field_product_bulk_edit', 10, 0 );
function custom_field_product_bulk_edit() {
    ?>
        <div class="inline-edit-group">
            <label class="alignleft">
                <span class="title"><?php _e('T. dostawy', 'woocommerce'); ?></span>
                <span class="input-text-wrap">
                    <select class="change_t_dostawy change_to" name="change_t_dostawy">
                    <?php
                        $options = array(
                            ''  => __( '— No change —', 'woocommerce' ),
                            '1' => __( 'Change to:', 'woocommerce' ),
                        );
                        foreach ( $options as $key => $value ) {
                            echo '<option value="' . esc_attr( $key ) . '">' . $value . '</option>';
                        }
                    ?>
                    </select>
                </span>
            </label>
            <label class="change-input">
                <input type="text" name="_t_dostawy" class="text t_dostawy" placeholder="<?php _e( 'Enter Termin dostawy', 'woocommerce' ); ?>" value="" />
            </label>
        </div>
    <?php
}

// Save the custom fields data when submitted for product bulk edit
add_action('woocommerce_product_bulk_edit_save', 'save_custom_field_product_bulk_edit', 10, 1);
function save_custom_field_product_bulk_edit( $product ){
    if ( $product->is_type('simple') || $product->is_type('external') ){
        $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

        if ( isset( $_REQUEST['_t_dostawy'] ) )
            update_post_meta( $product_id, '_text_field', sanitize_text_field( $_REQUEST['_t_dostawy'] ) );
    }
}

Code goes in function.php file of your active child theme (or theme) or also in any plugin file.

This code is tested and works. You will get this:



回答2:

Yes it is possible, and without any hooks and code:

  • Install plugin WooCommerce Bulk Editor (WOOBE): https://wordpress.org/plugins/woo-bulk-editor/
  • Go to tab Meta Fields and add your meta key there, press Save button
  • In tab Settings activate column with that new meta key
  • Using tab Bulk Edit do your manipulations

That is all :)

p.s. docs: https://bulk-editor.com/document/meta-fields/