web-dev-qa-db-ja.com

MetaboxはUpdateまたはPublishに保存しますが、Saving Draftには保存しません

私が作成したカスタムmeta_boxも持つカスタム投稿タイプを作成しました。現在、投稿を公開または更新しても保存されますが、ドラフトモードで変更を加えても保存されません。

add_action('save_post', 'save_details');

function save_details(){
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
    return $post_id;
}
global $post;
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を使用しようとしましたが、それから逆の問題がありました。下書きを節約できますが、投稿を公開しても機能しません。ドラフトを(公開前に)更新して保存できるようにするには、どうしたらよいですか。

1
rmlumley

そのため、最初にwp_insert_post_dataにフックしようとしました。下書きを保存するときにメタデータを保存できましたが、公開するときには保存できませんでした。それからあなたはsave_postにフックしようとしました、そして公開時にメタデータを保存することはできましたがドラフトを保存するときにはできませんでした。

最も簡単な解決策は両方に接続することでしょう。

add_action('save_post', 'save_details');
add_action('wp_insert_post_data', 'save_details');

編集する

save_postwp_insert_post_dataは同時に呼び出され、2つのパラメータをコールバック関数に渡します。ソースでは、このようになります。

do_action('save_post', $post_ID, $post);
do_action('wp_insert_post', $post_ID, $post);

しかしあなたの関数はパラメータを受け付けません。これはreturn $post_IDを失敗させ、他の問題も引き起こす可能性があります。

あなたが持っている必要があります:

function save_details( $post_ID, $post ) {
    ...
}

そしてあなたのフックは次のようになります。

add_action( 'save_post', 'save_details', 10, 2 );

これは$post_ID$postの両方をあなたの関数に渡し、そして物事をもう少し円滑にさせるでしょう。

1
EAMann

私は私が検証に戻る機会を得られなかったけれども私がワードプレスを3.1にアップグレードすることによって引き起こされたと私が思うと同様の問題を抱えていました。上記のように10、2ではなくパラメータ1,2を渡すように注意して、私のコードを上記のように$ post_idと$ postに渡すように変更しました。これで問題は解決しました。 wp_insert_postにフックを追加してもうまくいかず、新しいカスタム投稿を追加するときにエラーが発生しました。

この助けを願っています。私の最初の返事は、私がはっきりしないならとても残念です。

1
Manish