web-dev-qa-db-ja.com

自動保存時にメタデータの消去を投稿する

初心者のために私はカスタム投稿タイプと他のページにそれらの投稿タイプを挿入するカスタム方法を達成するためにこの素晴らしい答えを使っています、あなたはここでその答えを見ることができます: 既存の投稿のドロップダウンは?

私は問題に遭遇していますワードプレス自動が自分自身を保存するとき、それは私がフォームに入れたどんなメタデータもクリアします。

例:

メタボックスから必要な3つのドロップダウンを選択してアップデートをクリックします。

ページがリロードされ、3つの選択肢がまだ選択されています。 phpMyAdminでは、メタデータを調べて配列を正しい位置に表示できます。

ワードプレスが自動保存されるのを待ちます。

これが起こるとすぐに私はページを更新することができます(更新しないで更新するだけです)そしてメタデータを失うか、あるいはphpMyAdminでメタデータを検索して何も表示しないでしょう(すなわち消えます)。

私はこれが別のフック(ある種の自動更新フック)か何かに結びつける必要があることと関係があることを推測しています、しかしそれでもそれはそれが実際にあなたのメタデータを削除するという意味ではありませんそれ)。

最後の注意:Mikesのコードをfunctions.phpにコピー&ペーストすると、私のエラーを簡単に再現できるはずです(wordpress 3.1)。

1
William

さて、いつものように私はダミーのように感じます、しかし何時間もインターネットを捜して、それが多くの人々がこの質問をしているように思われ、そしてどこでも答えを見つけることができないようです。

重要なコードは次のようなものです。

add_filter('wp_insert_post_data',array(__CLASS__,'filter_wp_insert_post_data'),10,2);
static function filter_wp_insert_post_data($data, $postarr) {
     update_post_meta($postarr['ID'],'_offices',$postarr['offices']);
     return $data;
}

何が起こっていたのかというと、このコードが実行されるのですが、$ postarr ['office']がないため、代わりに空白のデータが挿入されています。だからこれに対する素早い解決策は:

if(isset($postarr['offices']))
update_post_meta($postarr['ID'],'_offices',$postarr['offices']);

挿入したいデータが設定されていない場合は、更新されません。

なぜwordpressが自動保存でこれらの変数を渡さないのかわからないが、実際の保存では行われますが、どちらの方法でもうまくいくので嬉しいです。

1
William

保存ポストアクションを使用して、状態を確認します。

<?php

add_action('save_post' ,'my_save_postdata');

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

    // logic

}
3
Marcin