0

How can I refresh the wp-admin/edit.php page after a user clicks Update in the Quick-edit form?

3
  • Just add a js click handler to the link/button from within a custom plugin.
    – kaiser
    Commented Sep 14, 2012 at 18:53
  • It has to occur after the ajax call, otherwise the update will have no affect. Commented Sep 14, 2012 at 22:37
  • Then add your event handler after the ajax call happened.
    – kaiser
    Commented Sep 15, 2012 at 1:27

2 Answers 2

2

We have to intercept the Ajax end point of that action. The file wp-admin/admin-ajax.php has all the possible hooks in the $core_actions_post array.

The function wpse_65157_ajax_inline_save() is a copy of the Core's, with a "force reload" script printed at the end. It has to be with Javascript, as wp_redirect() doesn't work.

add_action( 'wp_ajax_inline-save', 'wpse_65157_ajax_inline_save' , 0 );

/**
 Copy of the function wp_ajax_inline_save()
 http://core.trac.wordpress.org/browser/tags/3.4.2/wp-admin/includes/ajax-actions.php#L1315

 Only Modification marked at the end of the function with INTERCEPT
*/
function wpse_65157_ajax_inline_save()
{
    global $wp_list_table;

    check_ajax_referer( 'inlineeditnonce', '_inline_edit' );

    if ( ! isset($_POST['post_ID']) || ! ( $post_ID = (int) $_POST['post_ID'] ) )
        wp_die();

    if ( 'page' == $_POST['post_type'] ) {
        if ( ! current_user_can( 'edit_page', $post_ID ) )
            wp_die( __( 'You are not allowed to edit this page.' ) );
    } else {
        if ( ! current_user_can( 'edit_post', $post_ID ) )
            wp_die( __( 'You are not allowed to edit this post.' ) );
    }

    set_current_screen( $_POST['screen'] );

    if ( $last = wp_check_post_lock( $post_ID ) ) {
        $last_user = get_userdata( $last );
        $last_user_name = $last_user ? $last_user->display_name : __( 'Someone' );
        printf( $_POST['post_type'] == 'page' ? __( 'Saving is disabled: %s is currently editing this page.' ) : __( 'Saving is disabled: %s is currently editing this post.' ),    esc_html( $last_user_name ) );
        wp_die();
    }

    $data = &$_POST;

    $post = get_post( $post_ID, ARRAY_A );
    $post = add_magic_quotes($post); //since it is from db

    $data['content'] = $post['post_content'];
    $data['excerpt'] = $post['post_excerpt'];

    // rename
    $data['user_ID'] = $GLOBALS['user_ID'];

    if ( isset($data['post_parent']) )
        $data['parent_id'] = $data['post_parent'];

    // status
    if ( isset($data['keep_private']) && 'private' == $data['keep_private'] )
        $data['post_status'] = 'private';
    else
        $data['post_status'] = $data['_status'];

    if ( empty($data['comment_status']) )
        $data['comment_status'] = 'closed';
    if ( empty($data['ping_status']) )
        $data['ping_status'] = 'closed';

    // update the post
    edit_post();

    $wp_list_table = _get_list_table('WP_Posts_List_Table');

    $mode = $_POST['post_view'];
    $wp_list_table->display_rows( array( get_post( $_POST['post_ID'] ) ) );

    // INTERCEPT: Check if it is our post_type, if not, do nothing  
    if( 'post' == $_POST['post_type'] )
    {
    ?>
        <script type="text/javascript">
            document.location.reload(true);
        </script>
    <?php       
    }
    // end INTERCEPT

    wp_die();

}

Reference Q&A: How to enable comments for pending and draft posts?

0

I dug through WordPress' wp-admin/js/inline-edit-post-dev.js and found that there aren't any hooks for executing JS code after the quick-edit update.

I decided to override the inlineEditPost.save function from wp-admin/js/inline-edit-post-dev.js, similar to how WordPress recommends updating form data when the quick edit form is displayed (which overrides inlineEditPost.edit).

The full function can be found in wp-admin/js/inline-edit-post-dev.js. I just changed the callback function in the post call to reload the page instead of hiding the quick edit form.

(function($) {
    inlineEditPost.save = function(id) {
        //...
        // make ajax request
        $.post( ajaxurl, params,
            function(r) {
                location.reload();
            }
        , 'html');
        //...
    }
})(jQuery);
2
  • If anybody has a better suggestion, please post! Commented Sep 14, 2012 at 18:40
  • Much probably the first downvote was for the same reason: modifying the core is not considered a good answer...
    – brasofilo
    Commented Dec 1, 2012 at 17:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.