web-dev-qa-db-fra.com

WP Zone d'édition rapide personnalisée de la table de liste - publication de métadonnées manquantes et modification des colonnes lors de l'envoi

J'ai étendu la classe WP_List_Table pour créer une table de messages triable personnalisée ainsi qu'une zone de modification rapide avec des boîtes de méta personnalisées.

Les méta-boîtes sont remplies et sauvegardées, mais lorsque je clique sur Soumettre, les valeurs du champ disparaissent et les valeurs par défaut (cb, titre, tags, chats, etc.) qui ne sont même pas incluses dans ma classe sont rajoutées à la colonne enregistrée. Cela jette les autres colonnes de la page. Les valeurs de champ personnalisé enregistrées sont renvoyées lors de l'actualisation de la page.

Il semble que sur $ submit le $ post_object est manquant.

J'utilise une fonction get_inline_data piratée qui inclut les méta_valeurs dans mon formulaire d'édition rapide au lieu d'appeler get_inline_data dans ma classe.

Ma fonction de sauvegarde pour les méta-boîtes:

add_action( 'save_post', 'save_inline_edit_meta' );
function save_inline_edit_meta( $post_id  ) {
    global $pagenow;

    if ( $pagenow == 'admin.php' ) {
     if ( isset( $_POST[ 'is_quickedit' ] )  && isset( $_POST[ 'standinghead' ] ) )
        update_post_meta( $post_id, '_wnd_standing_head', $_POST[ 'standinghead' ] );

    if ( isset( $_POST[ 'is_quickedit' ] )  && isset( $_POST[ 'headline' ] ) )
        update_post_meta( $post_id, '_wnd_alt_title', $_POST[ 'headline' ] );

    if ( isset( $_POST[ 'is_quickedit' ] )  && isset( $_POST[ 'deck' ] ) )
        update_post_meta( $post_id, '_wnd_deck', $_POST[ 'deck' ] );
    }
  return $post_id;

}

Ma fonction de sauvegarde Javascript:

save : function(id) {
        var params, fields, page = $('.post_status_page').val() || '';

        if ( typeof(id) == 'object' )
            id = this.getId(id);
        $('table.widefat .inline-edit-save .waiting').show();
        params = {
            action: 'inline-save',
            post_ID: id,
            post_type: 'post',
            edit_date: 'true',
            post_status: page
        };
        fields = $('#edit-'+id+' :input').serialize();
        params = fields + '&' + $.param(params);

        $.post('admin-ajax.php', params,
            function(r) {
                $('table.widefat .inline-edit-save .waiting').hide();

                if (r) {
                    if ( -1 != r.indexOf('<tr') ) {
                        $(inlineEditPost.what+id).remove();
                        $('#edit-'+id).before(r).remove();
                        $(inlineEditPost.what+id).hide().fadeIn();
                    } else {
                        r = r.replace( /<.[^<>]*?>/g, '' );
                        $('#edit-'+id+' .inline-edit-save .error').html(r).show();
                    }
                } else {
                    $('#edit-'+id+' .inline-edit-save .error').html(inlineEditL10n.error).show();
                }
            }
        , 'html');
        return false;
    },

enter image description here

6
Chris_O

Je viens d'exécuter la même erreur lors de l'ajout de colonnes supplémentaires aux types d'article par défaut.

La ligne incriminée était le contrôle $pagenow.
Quick Edit utilise admin-ajax.php pour ne pas restituer les colonnes personnalisées une fois terminé.

Cela ne marche pas:

if( 'edit.php' == $pagenow && is_admin() )
{
    add_action( 'admin_init', array( $this, 'init_id_column' ), 999 );
    add_action( 'admin_init', array( $this, 'init_thumb_column' ), 999 );
}

Mais cela fait:

if( 
    ( 'edit.php' == $pagenow && is_admin() ) 
    or
    ( 'admin-ajax.php' == $pagenow && 'inline-save' == $_POST['action'] && 'list' == $_POST['post_view'] )
)
{
    add_action( 'admin_init', array( $this, 'init_id_column' ), 999 );
    add_action( 'admin_init', array( $this, 'init_thumb_column' ), 999 );
}

Je ne sais pas si c'est la meilleure méthode pour faire cette vérification, cependant ...

Relatif billet de piste .

5
brasofilo