I added two columns and custom fields in quick edit. One based on text and one as dropdown. They work just fine in quick edit and I rely on
My script when changed is the following
(function($) {
// we create a copy
var $wp_inline_edit = inlineEditPost.edit;
//overwrite the function
inlineEditPost.edit = function( id ) {
$wp_inline_edit.apply( this, arguments );
// get the post ID
var $post_id = 0;
if ( typeof( id ) == 'object' )
$post_id = parseInt( this.getId( id ) );
if ( $post_id > 0 ) {
// define the edit row
var $edit_row = $( '#edit-' + $post_id );
// get the sku
var $bfsku = $( '#_text_field-' + $post_id ).text();
// set the sku
$edit_row.find( 'input[name="test_column"]' ).val( $bfsku );
// get the supplier
var $supplier = $( '#_select-' + $post_id ).text();
// set the supplier
$edit_row.find( 'select[name="test_column2"]' ).val( $supplier );
}
};
$( '#bulk_edit' ).live( 'click', function() {
// define the bulk edit row
var $bulk_row = $( '#bulk-edit' );
// get the selected post ids that are being edited
var $post_ids = new Array();
$bulk_row.find( '#bulk-titles' ).children().each( function() {
$post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
});
// get the custom fields
var $bfsku = $bulk_row.find( 'input[name="test_column"]' ).val();
var $supplier = $bulk_row.find( 'select[name="test_column2"]' ).val();
// save the data
$.ajax({
url: ajaxurl, // this is a variable that WordPress has already defined for us
type: 'POST',
async: false,
cache: false,
data: {
action: 'manage_wp_posts_using_bulk_quick_save_bulk_edit', // this is the name of our WP AJAX function that we'll set up next
post_ids: $post_ids, // and these are the 2 parameters we're passing to our function
test_column: $bfsku,
test_column2: $supplier
}
});
});
})(jQuery);
And the Function is the following
function manage_wp_posts_using_bulk_quick_save_bulk_edit() {
// we need the post IDs
$post_ids = ( isset( $_POST[ 'post_ids' ] ) && !empty( $_POST[ 'post_ids' ] ) ) ? $_POST[ 'post_ids' ] : NULL;
// if we have post IDs
if ( ! empty( $post_ids ) && is_array( $post_ids ) ) {
// get the custom fields
$custom_fields = array( 'test_column', 'test_column2' );
foreach( $custom_fields as $field ) {
// if it has a value, doesn't update if empty on bulk
if ( isset( $_POST[ $field ] ) && !empty( $_POST[ $field ] ) ) {
// update the price
if ( isset( $_POST['test_column'] ) ) {
update_post_meta( $post_id, '_text_field', $_POST['test_column'] );
}
// update the price
if ( isset( $_POST['test_column2'] ) ) {
update_post_meta( $post_id, '_select', $_POST['test_column2'] );
}
}
}
}
}
add_action( 'wp_ajax_manage_wp_posts_using_bulk_quick_save_bulk_edit', 'manage_wp_posts_using_bulk_quick_save_bulk_edit' );
My problem is that Update button seems not working, I am confused with variable names and slugs (I believe they are correct)
Why is not closing the bulk edit when update is finished??
The changes are saved by the following instead the above BUT the bulk edit stays open and the update button it does not show the little spinning circle, so I need to refresh the page for the changes to be shown.
// 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['test_column'] ) )
update_post_meta( $product_id, '_text_field', sanitize_text_field( $_REQUEST['test_column'] ) );
if ( isset( $_REQUEST['test_column2'] ) )
update_post_meta( $product_id, '_select', sanitize_text_field( $_REQUEST['test_column2'] ) );
}
}