0

このコードを作成しました。ワードプレスのメタボックス機能を使用して、投稿の追加データを DB に保存することになっています。

//Price list meta boxes
add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add() {add_meta_box( 'price-list-id', 'Price List', 'cd_meta_box_cb', 'post', 'normal', 'high' );}

function cd_meta_box_cb()
{  
    // $post is already set, and contains an object: the WordPress post
    global $post;
    $values = get_post_custom( $post->ID );

        // 
        $plheading = isset( $values['price_list_heading'] ) ? esc_attr( $values['price_list_heading'][0] ) : '';

        $plcategory1 = isset( $values['price_list_category1'] ) ? esc_attr( $values['price_list_category1'][0] ) : '';
        $plcategoryitems1 = isset( $values['price_list_items_category1'] ) ? esc_attr( $values['price_list_items_category1'][0] ) : '';

        $plcategory2 = isset( $values['price_list_category2'] ) ? esc_attr( $values['price_list_category2'][0] ) : '';
        $plcategoryitems2 = isset( $values['price_list_items_category2'] ) ? esc_attr( $values['price_list_items_category2'][0] ) : '';

        $plcategory3 = isset( $values['price_list_category3'] ) ? esc_attr( $values['price_list_category3'][0] ) : '';
        $plcategoryitems3 = isset( $values['price_list_items_category3'] ) ? esc_attr( $values['price_list_items_category3'][0] ) : '';


    // We'll use this nonce field later on when saving.
    wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
    ?>

        <p>
            <label for="price_list_heading">Price list heading:</label>
            <input type="text" name="price_list_heading" id="price_list_heading" value="<?php echo $plheading; ?>" />
        </p>

        <p>
            <label for="price_list_category1">Category1 Title:</label>
            <input type="text" name="price_list_category1" id="price_list_category1" value="<?php echo $plcategory1; ?>" />
            <textarea style="width: 100%;" rows="3" name="price_list_items_category1" id="price_list_items_category1"><?php echo $plcategoryitems1; ?></textarea>
            <span style="display: block; font-weight: bold; text-align: right;">Example: Rhine Riesling1|0,75 l|9,50 &euro;</span>
        </p>

        <p>
            <label for="price_list_category2">Category2 Title:</label>
            <input type="text" name="price_list_category2" id="price_list_category2" value="<?php echo $plcategory2; ?>" />
            <textarea style="width: 100%;" rows="3" name="price_list_items_category2" id="price_list_items_category2"><?php echo $plcategoryitems2; ?></textarea>
            <span style="display: block; font-weight: bold; text-align: right;">Example: Rhine Riesling1|0,75 l|9,50 &euro;</span>
        </p>

        <p>
            <label for="price_list_category3">Category3 Title:</label>
            <input type="text" name="price_list_category3" id="price_list_category3" value="<?php echo $plcategory3; ?>" />
            <textarea style="width: 100%;" rows="3" name="price_list_items_category3" id="price_list_items_category3"><?php echo $plcategoryitems3; ?></textarea>
            <span style="display: block; font-weight: bold; text-align: right;">Example: Rhine Riesling1|0,75 l|9,50 &euro;</span>
        </p>

    <?php
}

//Saving price list
add_action( 'save_post', 'cd_meta_box_save' );  
function cd_meta_box_save( $post_id )  
{  
        // Bail if we're doing an auto save
        if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

        // if our nonce isn't there, or we can't verify it, bail
        if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;

        // if our current user can't edit this post, bail
        if( !current_user_can( 'edit_post' ) ) return;


        // Make sure your data is set before trying to save it
        if( isset( $_POST['price_list_heading'] ) )
            update_post_meta( $post_id, 'price_list_heading', esc_attr( $_POST['price_list_heading'] ) );


        //
        if( isset( $_POST['price_list_category1'] ) )
            update_post_meta( $post_id, 'price_list_category1', esc_attr( $_POST['price_list_category1'] ) );

        if( isset( $_POST['price_list_items_category1'] ) )
            update_post_meta( $post_id, 'price_list_items_category1', esc_attr( $_POST['price_list_items_category1'] ) );


        //
        if( isset( $_POST['price_list_category2'] ) )
            update_post_meta( $post_id, 'price_list_category2', esc_attr( $_POST['price_list_category2'] ) );

        if( isset( $_POST['price_list_items_category2'] ) )
            update_post_meta( $post_id, 'price_list_items_category2', esc_attr( $_POST['price_list_items_category2'] ) );


        //
        if( isset( $_POST['price_list_category3'] ) )
            update_post_meta( $post_id, 'price_list_category3', esc_attr( $_POST['price_list_category3'] ) );

        if( isset( $_POST['price_list_items_category3'] ) )
            update_post_meta( $post_id, 'price_list_items_category3', esc_attr( $_POST['price_list_items_category3'] ) );
}

テキストボックスに書いたものとDBの入力を保存する代わりに、すべてのフィールドで「配列」を見つけました! 何が起こっている?私は何を取りこぼしたか?

4

2 に答える 2

1

理解した$plheading = isset( $values['price_list_heading'] ) ? esc_attr( $values['price_list_heading'][0] ) : '';

行方不明だった[0]

ところで、そのチュートリアルでは、いくつかの例[0]が欠落しています:)

于 2012-06-26T10:59:48.523 に答える
0

手順を見て、何か見逃していないかどうかを確認してください。リンクは次のとおりです http://www.farinspace.com/how-to-create-custom-wordpress-meta-box/

于 2012-06-26T10:55:37.373 に答える