web-dev-qa-db-de.com

Undefinierte Variable post_id in der benutzerdefinierten Schnelleditierspalte

Ich versuche, eine benutzerdefinierte Spalte hinzuzufügen, um eine schnelle Bearbeitung zu veröffentlichen, und alles funktioniert fast. Benutzerdefiniertes Meta wird gespeichert und übergeben, aber wenn ich auf Schnellbearbeitung klicke, ist die Vorschau leer. Dies ist der Fehler, den ich bekomme: Hinweis: Undefinierte Variable: post_id in /home/etimueit/public_html/wp-content/themes/caru/functions.php in Zeile 626  I can see the data here (last coloumn)  No variable here (but still saved in DB) 

Hier ist mein Code.

function disponibilitaet_quickedit_custom_posts_columns( $posts_columns ) { $posts_columns['disponibilitaet_edit_time'] = __( 'Modifica Disponibilità', 'disponibilitaet' ); return $posts_columns; } add_filter( 'manage_post_posts_columns', 'disponibilitaet_quickedit_custom_posts_columns' );

function disponibilitaet_quickedit_custom_column_display( $column_name, $post_id ) {
    if ( 'disponibilitaet_edit_time' == $column_name ) {
        $dispo_registrata = get_post_meta( $post_id, 'disponibilitaet_edit_time', true );

        if ( $dispo_registrata ) {
            echo esc_html( $dispo_registrata );
        } else {
            esc_html_e( 'N/A', 'disponibilitaet' );
        }
    }
}
add_action( 'manage_post_posts_custom_column', 'disponibilitaet_quickedit_custom_column_display', 10, 2 );

function disponibilitaet_quickedit_fields( $column_name, $post_type ) {
    if ( 'disponibilitaet_edit_time' != $column_name )
        return;`

// Das ist Zeile 626

    $dispo_registrata = get_post_meta( $post_id, 'disponibilitaet_edit_time', true );
    ?>
    <fieldset class="inline-edit-col-right">
        <div class="inline-edit-col">
            <label>
                <span class="title"><?php esc_html_e( 'Disponibilit&agrave;', 'disponibilitaet' ); ?></span>
                <span class="input-text-wrap">
                <input type="text" name="disponibilitaet_edit_time" class="disponibilitaetedittime" value="<?php echo $dispo_registrata;?>">
            </span>
            </label>
        </div>
    </fieldset>
    <?php
}
add_action( 'quick_edit_custom_box', 'disponibilitaet_quickedit_fields', 10, 2 );
function disponibilitaet_quickedit_save_post( $post_id, $post ) {
    // if called by autosave, then bail here
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;

    // if this "post" post type?
    if ( $post->post_type != 'post' )
        return;

    // does this user have permissions?
    if ( ! current_user_can( 'edit_post', $post_id ) )
        return;

    // update!
    if ( isset( $_POST['disponibilitaet_edit_time'] ) ) {
        update_post_meta( $post_id, 'disponibilitaet_edit_time', $_POST['disponibilitaet_edit_time'] );
    }
}
add_action( 'save_post', 'disponibilitaet_quickedit_save_post', 10, 2 );

function disponibilitaet_quickedit_javascript() {
    $current_screen = get_current_screen();
    if ( $current_screen->id != 'edit-post' || $current_screen->post_type != 'post' )
        return;

    // Ensure jQuery library loads
    wp_enqueue_script( 'jquery' );
    ?>
    <script type="text/javascript">
        jQuery( function( $ ) {
            $( '#the-list' ).on( 'click', 'a.editinline', function( e ) {
                e.preventDefault();
                var editTime = $(this).data( 'edit-time' );
                inlineEditPost.revert();
                $( '.disponibilitaetedittime' ).val( editTime ? editTime : '' );
            });
        });
    </script>
    <?php
}
add_action( 'admin_print_footer_scripts-edit.php', 'disponibilitaet_quickedit_javascript' );
2
Downloadtaky

Hier haben wir endlich eine Lösung gefunden, ich lasse es hier also vielleicht kann es helfen (vielleicht auch zukünftig mir XD).

/**

* * Aggiungi Disponibilità nel Quick Edit * /

function etdispo_quickedit_custom_posts_columns( $posts_columns ) {
    $posts_columns['et2018-quantita_birra'] = __( 'Disponibilità', 'etdispo' );
    return $posts_columns;
}
add_filter( 'manage_post_posts_columns', 'etdispo_quickedit_custom_posts_columns' );

function etdispo_quickedit_custom_column_display( $column_name, $post_id ) {
    if ( 'et2018-quantita_birra' == $column_name ) {
        $etdispo_regi = get_post_meta( $post_id, 'et2018-quantita_birra', true );

        if ( $etdispo_regi ) {
            echo esc_html( $etdispo_regi );
        } else {
            esc_html_e( 'N/A', 'etdispo' );
        }
    }
}
add_action( 'manage_post_posts_custom_column', 'etdispo_quickedit_custom_column_display', 10, 2 );

function etdispo_quickedit_fields( $column_name, $post_type, $post_id ) {
    if ( 'et2018-quantita_birra' != $column_name )
        return;

    $etdispo_regi = get_post_meta( $post_id, 'et2018-quantita_birra', true );
    ?>
    <fieldset class="inline-edit-col-right">
        <div class="inline-edit-col">
            <label>
                <span class="title"><?php esc_html_e( 'Disponibilità', 'etdispo' ); ?></span>
                <span class="input-text-wrap">
                <input type="text" name="et2018-quantita_birra" class="etdispoedit" value="">
            </span>
            </label>
        </div>
    </fieldset>
    <?php
}
add_action( 'quick_edit_custom_box', 'etdispo_quickedit_fields', 10, 3 );
function etdispo_quickedit_save_post( $post_id, $post ) {
    // if called by autosave, then bail here
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;

    // if this "post" post type?
    if ( $post->post_type != 'post' )
        return;

    // does this user have permissions?
    if ( ! current_user_can( 'edit_post', $post_id ) )
        return;

    // update!
    if ( isset( $_POST['et2018-quantita_birra'] ) ) {
        update_post_meta( $post_id, 'et2018-quantita_birra', $_POST['et2018-quantita_birra'] );
    }
}
add_action( 'save_post', 'etdispo_quickedit_save_post', 10, 2 );

function etdispo_quickedit_javascript() {
    $current_screen = get_current_screen();
    if ( $current_screen->id != 'edit-post' || $current_screen->post_type != 'post' )
        return;

    // Ensure jQuery library loads
    wp_enqueue_script( 'jquery' );
    ?>
    <script type="text/javascript">
        jQuery( function( $ ) {
            $( '#the-list' ).on( 'click', 'a.editinline', function( e ) {
                e.preventDefault();
                var editDispo = $(this).data( 'edit-dispo' );
                inlineEditPost.revert();
                $( '.etdispoedit' ).val( editDispo ? editDispo : '' );
            });
        });
    </script>
    <?php
}
add_action( 'admin_print_footer_scripts-edit.php', 'etdispo_quickedit_javascript' );
/* Qui */
function etdispo_quickedit_set_data( $actions, $post ) {
    $found_value = get_post_meta( $post->ID, 'et2018-quantita_birra', true );

    if ( $found_value ) {
        if ( isset( $actions['inline hide-if-no-js'] ) ) {
            $new_attribute = sprintf( 'data-edit-dispo="%s"', esc_attr( $found_value ) );
            $actions['inline hide-if-no-js'] = str_replace( 'class=', "$new_attribute class=", $actions['inline hide-if-no-js'] );
        }
    }

    return $actions;
}
add_filter('post_row_actions', 'etdispo_quickedit_set_data', 10, 2);
1
Downloadtaky

Entschuldigung, ich musste meine Antwort ändern, nachdem ich den WordPress-Codex überprüft hatte, um benutzerdefinierte bearbeitbare Daten zur Schnellbearbeitung hinzuzufügen. Daher müssen Sie auch die Verweise auf $post_id entfernen (aus den add_action-Argumenten und innerhalb Ihrer Funktion).

Es sieht so aus, als würde der quick_edit_custom_box nur 2 Argumente annehmen: $column_name und $post_type. Zum Abrufen und Anzeigen des Werts müssen Sie dann noch PHP und Javascript verwenden.

Wenn Sie den WordPress-Codex im Feld Benutzerdefinierte Schnellbearbeitung weiterlesen und weiter unten im Abschnitt ' Vorhandene Werte festlegen ' nachlesen, werden Sie feststellen, dass einiges mehr Arbeit erforderlich ist um dies zu tun.

Ich würde vorschlagen, die Dokumentation etwas ausführlicher zu lesen, da es nicht ganz so einfach ist, wie ich zuerst dachte ...

2
Mat