これは解読するのが難しいクッキーであることが判明しましたが、この機能を複製しようとしている他の魂のために共有すべきだと感じる多くのことを学びました.
まず、現在の投稿の保存が更新か公開かを指定する必要があります。アカは投稿が新しいかどうか?これを確認するための巧妙な小さなトリックを考えました。
$isNewPost = $data['post_date_gmt'] == $data['post_modified_gmt'];
私が使用した最初のフックはwp_insert_post_data
フックで、ポスト オブジェクトがデータベースに挿入/更新される前に呼び出されます。データベースへの挿入をキャンセルするものを何も返さないため、このフックは優れています。もちろん、常にこれを行いたいとは限りません。投稿が新しい場合はデータベースに追加する必要があるため、レビュー中のプレースホルダーがありますが、追加するだけでなく、投稿ステータスを下書きに設定します。更新の場合は、そこにレビューを追加するだけで何も返しません。
投稿が新しい場合は、post_updated
フックにフックする必要もあります。実際の DB レコードがあるのはそのときだけなので、渡された ID をレコードに保存し、wp_insert_post_data
それを使用して正しいpost_saved
イベントを見つけてから、レビュー投稿。
Wordpress はやや奇妙です。新しい投稿画面にアクセスすると、投稿が自動ドラフト タイプのデータベースに追加され、別の投稿での数秒間の編集が保存されます (投稿タイプがそれをサポートしている場合、組み込みのものはそうします)、これはすべての保存後のイベントも発生させます。私が遭遇したもう 1 つの問題は、レビュー投稿を保存することでした。これは、post_saved
andwp_insert_post_data
フックがトリガーされ、無限ループが発生するためです。
他にも興味深い問題がいくつかありました。もし興味があれば、喜んでお手伝いします。悲しいことに、私が会社のために書いたコードはプロプライエタリです。おそらく、ある時点でオープン ソース化するように彼らを説得できるでしょう (ほとんどの場合、ただし、プライバシーに関するクライアントとの契約に基づいているため、そうではない可能性があります)。
ワークフローは、それを保証するのに十分に複雑であると考えているので、図で表すかもしれません。他の人を助けるかもしれませんが、これは解決するのが簡単な問題ではありませんでした.
投稿のメタデータを扱っている場合は、一言アドバイスを差し上げます (私を信じてください。当初は気にする必要はないと言っていたとしても、彼らはあなたにそうしてほしいと思っています)。子にする。必要なその他の情報とともに、元の親をポスト メタに保存します。この方法では、編集ページの再構築に対処する必要はありません。