web-dev-qa-db-ja.com

カスタムクイック編集列の未定義変数post_id

クイック編集を投稿するためのカスタム列を追加しようとしていますが、すべてうまくいっています。カスタムメタは保存されて渡されますが、クイック編集をクリックするとプレビューは空白になります。これは私に与えているエラーです:Notice:未定義の変数:/home/etimueit/public_html/wp-content/themes/caru/functions.php in 626 I can see the data here (last coloumn)No variable here (but still saved in DB)

これが私のコードです。

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;`

//これは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

ここで私たちは、ついに解決策を見つけました、私はそれをここで残しているので多分それは助けることができるでしょう(多分また将来私XD)。

/**

* * AggiungiDisponibilitàlクイック編集* /

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

申し訳ありませんが、クイック編集にカスタム編集可能データを追加する際にWordPress Codexを確認した後、回答を変更する必要がありました。そのため、$post_idへの参照も(add_action引数から、そして関数内から)削除する必要があります。

quick_edit_custom_boxは2つの引数($column_name$post_type)のみを取るように見えます。それから値を取得して表示するために、これはもう少しPHPとJavascriptを使ってされなければなりません。

クイック編集カスタムボックス のWordPressコーデックスの詳細を読み、 ' 既存の値の設定 'のセクションに進んでみると、もう少し公平です。これを行うために必要な作業。

私が最初に考えたほど簡単ではないので、もう少し詳しくドキュメントを読むことをお勧めします。

2
Mat