web-dev-qa-db-ja.com

保存時に投稿メタが削除される

デフォルトとカスタムの両方のすべての投稿タイプで投稿メタを保存できません。私は自分の関数を実行するためにsave_postにフックしています、そして起こっていることはpostメタが追加されてからすぐに削除されるということです。これは私が今持っているものです:

function saveSidebarMeta($postId) {
    $toAdd = $_POST['collection-topics'];
    foreach ($toAdd as $topic) {
        add_post_meta($postId, 'collection-topic', $topic);
    }
}

add_action('save_post', 'saveSidebarMeta', 100);

現時点では、優先順位を100に設定していますので、投稿メタは保存されますが、ページが再度保存された場合、正しい情報が追加されない限り投稿メタは削除されます。誰かが投稿を保存するたびのデータ。

優先順位がデフォルトの10に設定されている場合、データは保存されますが、その後すぐに削除されます。これは、1.)add_post_meta()がmeta_keyを返し、それがデータベースに存在しないことと、2.)dieを入れた場合( )ステートメントadd_post_meta()の直後に、メタデータがテーブルに表示されます。

私はポストメタをうまく保存する他の機能があります。ここで本当に簡単なものが足りないのですか。私はしばらくこの問題を見てきましたが、解決するために探す場所や指示を使い果たしました。任意の助けがいただければ幸いです。ありがとうございます。

1
Eric Strom

投稿を保存する前に、保存したデータを投稿編集ページに出力していますか?そうでない場合は、空の$ _POST ['collection-topics']データを取得してから、空またはnullデータを保存している可能性があります。

私はadd_post_meta()をする前にチェックをするでしょう

if ( empty($_POST['collection-topics']) ) return;
1
stoi2m1

ここから始めますが、フォームを生成するコードも確認する必要があります。

1つの可能性は自動保存があなたをめちゃくちゃにしているので、あなたのコードでこのバリエーションを試してください。

add_action('save_post', 'saveSidebarMeta', 100);

function saveSidebarMeta( $postId ) {

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

        $toAdd = $_POST['collection-topics'];
        foreach ($toAdd as $topic) {
            add_post_meta($postId, 'collection-topic', $topic);
        }
    }

}

しかし、私たちがあなたのフォームもコードを生成するのを見ることができれば私はこれをさらに拡張することができるかもしれません。

0