2

作成したカスタムmeta_boxesも含むカスタム投稿タイプを作成しました。現在、投稿を公開または更新すると保存されますが、ドラフトモードで変更を加えている場合は保存されません。

add_action('save_post', 'save_details');

function save_details($post_id){
    global $post;
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
    return $post_id;
}
if ($post->post_type == 'events') { // Check to see if Event Type.
    update_post_meta($post->ID, "event_featuring", $_POST["event_featuring"]);
    update_post_meta($post->ID, "event_time", $_POST["event_time"]);
    update_post_meta($post->ID, "event_date", $_POST["event_date"]);
    update_post_meta($post->ID, "event_end_date", $_POST["event_end_date"]);
    update_post_meta($post->ID, "event_location", $_POST["event_location"]);
    update_post_meta($post->ID, "empid", $_POST["empid"]);
    update_post_meta($post->ID, "bhs_event", $_POST["bhs_event"]);
}
}

save_postの代わりにwp_insert_post_dataを使用しようとしましたが、逆の問題が発生しました。下書きを節約できますが、投稿の公開は機能しなくなりました。同じ問題で、両方を同時に呼び出してみました。ドラフトを(公開する前に)更新して保存できるようにするには、別の方法で何をする必要がありますか?3.1に切り替える前は、これは問題なく機能していたと確信しています。

4

1 に答える 1

2

save_postドラフト投稿であれ公開投稿であれ、何があっても呼ばれるので、うまくいかないことに驚いています。しかし、あなたのコードにはいくつか奇妙な点があります。

あなたが持っていることを考えると$post_ID、私はそれをグローバルよりも使用したいと思います$post。また、私は自動ドラフトを検出する次の方法を好みます(wp-includes / post.phpから直接リッピングしました。Wordpressコードベースを調べて、可能な限りそれらのメソッドをエミュレートすることを好みます)。

次のリファクタリングされたコードを試して、問題が解決するかどうかをお知らせください。

add_action("save_post", "save_details");

function save_details($post_ID = 0) {
    $post_ID = (int) $post_ID;
    $post_type = get_post_type( $post_ID );
    $post_status = get_post_status( $post_ID );
    if ( "events" == $post_type && "auto-draft" != $post_status ) {
        update_post_meta($post_ID, "event_featuring", $_POST["event_featuring"]);
        update_post_meta($post_ID, "event_time", $_POST["event_time"]);
        update_post_meta($post_ID, "event_date", $_POST["event_date"]);
        update_post_meta($post_ID, "event_end_date", $_POST["event_end_date"]);
        update_post_meta($post_ID, "event_location", $_POST["event_location"]);
        update_post_meta($post_ID, "empid", $_POST["empid"]);
        update_post_meta($post_ID, "bhs_event", $_POST["bhs_event"]);
    }
    return $post_ID;
}
于 2011-04-12T16:31:00.467 に答える