図々しくも、12月19日、投稿させていただきました。
もしよろしければ、私の過去の後悔を最後まで読んでお付き合いただけますと幸いです。
前書き
WordPressでサイトを数おおく作るようになって、オリジナルテーマの開発を行う最初の時に、つまづきやすかった事。
そして、解決したことで、WordPressの理解が深まった、過去のことを書きます。
直面していた問題
オリジナルテーマにカスタム投稿タイプを、更にカスタム投稿タイプにカスタムフィールドを使ったことで、クイック編集でステータスやカテゴリーなど変更を加えると、カスタムフィールドの中身が全て消えてしまう現象に悩まされました。
解決したきっかけ
セーブ時にやり取りされる、$_POST['action'] で判別できる、クイック編集の保存タイプに"inline-save"、通常の編集は"editpost"とタイプが用意されていた事で解決できました。
解決したコード記述
function.php
function customfield_save($post_id){
if (isset( $_POST['action'] ) && $_POST['action'] == 'editpost') {
// 編集の場合のみ保存
update_post_meta($post_id, $value, $_POST[$value] );
}else{
// 編集以外は何もしない
return $post_id;
}
}
add_action('save_post', 'customfield_save');
解決したが問題点
もし、投稿一覧のクイック編集で自分で用意したカスタム投稿タイプのカスタムフィールドを編集できるようにした場合は、"inline-save"での処理が必要になります。
この現象を解決するまで気が付かなかったのですが、"save_post"は自分でカスタムフィールドを作った場合(function.phpで編集画面にフォームを追加している状態)、投稿一覧のリストのページからの「クイック編集」では画面に見えていないのに、自分で作ったカスタムフィールドも編集の操作の対象になってしまっていました。
まとめ
function.phpでカスタムフィールドを追加するのは、スタイルも調整できますし、投稿タイプごとに編集画面を使いやすくできるメリットもあるので良いと思います。
色々なサイトやドキュメントを見ると、WordPressは色々なカスタマイズがしやすいように作られているのでついつい、使いやすく考えてしまうけど、今は、そもそものWordPressの主旨からズレてきてしまうので、管理画面をいかにシンプルに使うかで考えて構築しています。