いつもお世話になっております。
WordPressで会員制のサイトを作成しております。
投稿権限を持つユーザでも管理画面の操作を禁止し、フロントエンドで投稿が行えるように Advanced Custom Fields (version 4) の acf_form()を用いて固定ページにフォームを作成しました。
フロントエンドからの投稿についてリビジョンが保存されないので、解決方法を模索しています。
###前提
ACFはバージョン4を利用しています。
function.phpでは、投稿に関連するアクション、フィルターにフックした独自の関数を用意しています。
管理画面からのあるカスタム投稿に対して
(a)wp_insert_post_dataにフックさせて、
・タイトルやメタデータの自動編集を実行
(b)save_postにフックさせて、
・入力内容に応じたタクソノミー、タームの追加、修正を実行
フロントエンドからの投稿に対して、
(c)acf/pre_save_postにフックさせて、
・新規作成の場合は、post_typeやpost_statusを指定し、wp_insert_post()を実行
・更新の場合は、投稿IDを指定し、(b)の関数をリムーブし、wp_update_post()を実行
→ (a)の関数が実行される
(d)acf/save_postにフックさせて、
・(b)と同一の関数を実行
###目標
フロントエンドからの投稿、編集に対して、管理画面からの投稿に対するものと同様のリビジョンが保存される。
###現実
管理画面からの投稿では、acfカスタムフィールドに対してもリビジョンが保存される。
フロントエンドからの投稿、編集では、リビジョンが一切保存されない。
###やったこと
(1)はじめに
以下を参考に、_wp_put_post_revisionにアクションフックをました。
support.advancedcustomfields.com/forums/topic/no-revision-when-update-from-front-end/
管理画面からの投稿に対してこのフックは有効になりましたが、フロントエンドからの編集では、do_action(_wp_put_post_revision)に到達せず、フックした関数が実行されないことがわかりました。
(2)つぎに
revision.phpを確認し、管理画面からの編集とフロントエンドからの編集を行った場合の差異を確認しました。
管理画面では、以下がFALSEになりますが、フロントエンドからだとTRUEになることがわかりました。
PHP
1if ( isset( $last_revision ) && apply_filters( 'wp_save_post_revision_check_for_changes', $check_for_changes = true, $last_revision, $post ) ) {
###質問
上記で確認出来た管理画面とフロンドエンドの差異がどうして発生するのか、また、どうすれば管理画面と同様の分岐をたどることができるのか教えてください。
どのような些細なことでも構いません。
ご助言いただければ幸いです。よろしくお願い致します。
###補足事項
次のローカル環境で開発、確認しております。
Bitnami WordPress: 4.7.5
OS: OS X El Capitan 10.11.6
サーバ : Apache
PHP: 7.1.5
FireFox 50.1.0
Chrome 55.0.2883.95 (64-bit)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/08 16:08
2017/06/08 16:24
2017/06/09 08:20
2017/06/09 09:32