admin管理员组

文章数量:1122832

The WordPress codex for bulk_edit_custom_box, along with this bulk edit example use the following piece of JavaScript to create an array of selected post IDs to send with the AJAX call that updates the posts.

$bulk_row.find( '#bulk-titles' ).children().each( function() {
    $post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
});

The full code surrounding this snippet is below.

My list tables have input fields for meta values, and the inline quick edit works successfully, but bulk edit fails. When debugging I found the $post_ids array is empty because there are no elements on my page with the ID #bulk-titles.

So my question, where do the #bulk-titles elements come from and why would my page not have them?

$( '#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 $item_thickness = $bulk_row.find( 'input[name="item_thickness"]' ).val();
    var $item_width = $bulk_row.find( 'input[name="item_width"]' ).val();
    var $item_length = $bulk_row.find( 'input[name="item_length"]' ).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
            item_thickness: $item_thickness,
            item_width: $item_width,
            item_length: $item_length
        }
    });

});

The WordPress codex for bulk_edit_custom_box, along with this bulk edit example use the following piece of JavaScript to create an array of selected post IDs to send with the AJAX call that updates the posts.

$bulk_row.find( '#bulk-titles' ).children().each( function() {
    $post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
});

The full code surrounding this snippet is below.

My list tables have input fields for meta values, and the inline quick edit works successfully, but bulk edit fails. When debugging I found the $post_ids array is empty because there are no elements on my page with the ID #bulk-titles.

So my question, where do the #bulk-titles elements come from and why would my page not have them?

$( '#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 $item_thickness = $bulk_row.find( 'input[name="item_thickness"]' ).val();
    var $item_width = $bulk_row.find( 'input[name="item_width"]' ).val();
    var $item_length = $bulk_row.find( 'input[name="item_length"]' ).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
            item_thickness: $item_thickness,
            item_width: $item_width,
            item_length: $item_length
        }
    });

});
Share Improve this question asked Aug 3, 2015 at 7:55 AndrewAndrew 9199 silver badges20 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

After searching through WordPress core I found the following on lines 1051 – 1057 of wp-admin/includes/class-wp-posts-list-table.php

if ( post_type_supports( $screen->post_type, 'title' ) ) :
    if ( $bulk ) : ?>
        <div id="bulk-title-div">
            <div id="bulk-titles"></div>
        </div>

<?php else : // $bulk ?>

So, in order for the #bulk-titles element to be part of your admin list the post type your working with needs to support title.

New custom posts types do support title by default. My custom post types are not using titles so I had set supports => false as an argument passed to register_post_type call.

Not supplying the supports argument or setting it to an array that includes title as a member solved the bulk edit problem, and I hid the title on post edit page using CSS.

本文标签: adminGet the selected posts IDs to use in bulk edit AJAX call