0

カスタム投稿タイプ用に、Wordpress でいくつかのメタ フィールドを作成しました。それらは「価格」と「詳細」です。「投稿の編集」ページに移動し、これらのフィールドのいずれかを変更した後、ブラウザで「戻る」を押すか、ウィンドウを閉じてページを離れることにした場合、ブラウザから警告が表示されます」ページを離れてもよろしいですか?」「はい」を押すと、編集前に保存されていたものであっても、これら 2 つのフィールドにあるものはすべて消去されます。

なぜこれが考えられるのでしょうか?

functions.php のコードの一部を次に示します。

add_action("admin_init", "admin_init");
function admin_init()
    {
        add_meta_box("price", "Price", "price_field", "product", "normal", "high");
        add_meta_box("details", "Details", "details_field", "product", "normal", "high");
    }

    function price_field()
    {
        global $post;
        $custom = get_post_custom($post->ID);
        $price = $custom["price"][0];
        ?>
        <label>Price: $</label>
        <input name="price" value="<?php echo $price; ?>" />
        <?php
    }

    function details_field()
    {
        global $post;
        $custom = get_post_custom($post->ID);
        $details = $custom["details"][0];
        ?>
        <label>Details:</label>
        <input name="details" rows='5' value="<?php echo $details; ?>" />
        <?php
    }


    /*--------------------------------*/
    /* Save PRICE and DETAILS fields */
    /*--------------------------------*/
    add_action('save_post', 'save_details');
    function save_details()
    {
        global $post;
        update_post_meta($post->ID, "price", $_POST["price"]);
        update_post_meta($post->ID, "details", $_POST["details"]);
    }
4

1 に答える 1

0

これは、詳細の保存方法にフィルタリングを追加しなかったためです。更新または公開ボタンをクリックしていなくても、投稿が下書きに自動保存されると、アクションフック「save_post」も呼び出されることに注意してください。これを試して

add_action('save_post', 'save_details');

 function save_details($post_id){
      if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
            return;

        // uncomment if youre using nonce
        //if ( !wp_verify_nonce( $_POST['my_noncename'], plugin_basename( __FILE__ ) ) )
          //       return;


        // Check permissions
        //change the "post" with your custom post type
        if ( 'post' == $_POST['post_type'] )
        {
           if ( !current_user_can( 'edit_page', $post_id ) )
                return;
        }
        else
        {
           if ( !current_user_can( 'edit_post', $post_id ) )
                return;
        }

      //if success go to your process
      //you can erase your global $post and dont use $post->ID rather change it with $post_id since its our parameter
      update_post_meta($post_id, "price", $_POST["price"]);
      update_post_meta($post_id, "details", $_POST["details"]);
 }

注: if ( 'post' == $_POST['post_type'] )行で、「post」を投稿タイプに変更します

于 2012-11-03T08:42:47.600 に答える