web-dev-qa-db-ja.com

カスタム投稿タイプメタボックス - 保存しない

カスタム投稿タイプを追加しました。私は2つのメタボックスも追加しました。それらはうまく機能するように見えますが、それらの中身は数分後に常に消えます。

誰かがこれを手伝うことができれば私は永遠に感謝するでしょう、S。

//メタボックスコード//

add_action( 'admin_init', 'add_custom_metabox' );
add_action( 'save_post', 'save_custom_details' );

function add_custom_metabox() {
    add_meta_box( 'custom-metabox', __( 'Product Description & Ingredients' ), 'descr_custom_metabox', 'sorbets', 'normal', 'low' );
}

function descr_custom_metabox() {
    global $post;
    $proddescr = get_post_meta( $post->ID, 'proddescr', true );
    $ingredients = get_post_meta( $post->ID, 'ingredients', true );
    ?>
    <p><label for="proddescr">Product Description:<br />
        <textarea id="proddescr" name="proddescr" style="margin:0;height:7em;width:98%;" cols="45" rows="4"><?php if( $proddescr ) { echo $proddescr; } ?></textarea></label></p>
    <p><label for="ingredients">Ingredients:<br />
        <textarea id="ingredients" name="ingredients" style="margin:0;height:7em;width:98%;" cols="45" rows="4"><?php if( $ingredients ) { echo $ingredients; } ?></textarea></label></p>
<?php
}

function save_custom_details( $post_ID ) {
    global $post;   
    if( $_POST ) {
        update_post_meta( $post->ID, 'proddescr', $_POST['proddescr'] );
        update_post_meta( $post->ID, 'ingredients', $_POST['ingredients'] );
    }
}

function get_descr_ingred_box() {
    global $post;

    $proddescr = get_post_meta( $post->ID, 'proddescr', true );
    $ingredients = get_post_meta( $post->ID, 'ingredients', true );

    return array( $proddescr, $ingredients );
}
1
sta777

autosaveをチェックし、それを回避する必要があります。また、save_postがすべての投稿に対して機能するため、正しい投稿タイプであるかどうかも確認してください。

function save_custom_details( $post_id ) {
    global $post;   
    //skip auto save
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return $post_id;
    }
    //check for you post type only
    if( $post->post_type == "sorbets" ) {
        if( isset($_POST['proddescr']) ) { update_post_meta( $post->ID, 'proddescr', $_POST['proddescr'] );}
        if( isset($_POST['ingredients']) ) { update_post_meta( $post->ID, 'ingredients', $_POST['ingredients'] );}

    }
}

WOWあなたたちみんな速いです:)

3
Bainternet

あなたがここでやっていることと私が使っている機能との違いは、IDを設定するためにglobal $ postに頼っているということだけです。

変数$ post_IDがすでにこの関数に渡されているのがわかります。

function save_custom_details( $post_ID ) {
    global $post;   
    if( $_POST ) {
        update_post_meta( $post->ID, 'proddescr', $_POST['proddescr'] );
        update_post_meta( $post->ID, 'ingredients', $_POST['ingredients'] );
    }
}

これを次のように変更することをお勧めします。

function save_custom_details( $post_ID ) {
    if( isset($_POST) ) {
        update_post_meta( $post_ID, 'proddescr', $_POST['proddescr'] );
        update_post_meta( $post_ID, 'ingredients', $_POST['ingredients'] );
    }
}

また、条件を($ _POST)から(isset($ _ POST))に切り替えました。これは、IFステートメントに対する回答を得るためのより信頼性の高い方法です。これが役立つかどうか私に知らせてください。そうでなければ、もう少し詳しく調べます。

0
Drew Gourley