件名のとおり、wordpressの記事最終更新日を「特定のカスタムフィールドが更新されたときだけ」更新したいのですが、可能でしょうか?
具体的に言いますと
(1)bookというカスタム投稿があり、
本文+カスタムフィールドが入力できるようになっています。
(2)通常は更新ボタンを押した時点で最終更新日が変更されますが、
これをカスタムフィールドに変更があったときだけ、最終更新日が変更されるようにしたいのです。
(3)なお、カスタム投稿(book)以外の投稿は、通常の仕様のまま運用したいです。
もし実現可能なのであれば、ご教示いただけますと幸いです。
何卒よろしくお願いいたします。
**追記
お返事ありがとうございます。調べて「チェックを入れてから更新ボタンを押したときだけ最終更新日を更新する」という処理を公開してくださっている方のページを見つけて、そちらの処理を一度入れてみました。
これをチェックを入れたときではなく、カスタムフィールドが書き換えられたときという条件に変更すればよいのかと思ったのですが、「カスタムフィールドが書き換えられたとき」をどのように判別すればよいのかというところで止まってしまいました。
**追記2
説明が不足しておりまして大変申し訳無いです。カスタム投稿もカスタムフィールドも使っております。
bookというcustom post typeがあり、そのなかでbook_authorというcustom fieldsがあります。
カスタム投稿(book)の特定のカスタムフィールド(book_author)に変更があったとき:最終更新日変更
カスタム投稿(book)の本文または他のカスタムフィールドが書き換えられたとき:最終更新日を更新しない
通常投稿(post)やbook以外のカスタム投稿が更新されたとき:通常通りの仕様で最終更新日変更
この説明で伝わりますでしょうか?お手数をおかけします。よろしくお願いいたします。
**追記3
現在以下のようなコードを書いています。
カスタム投稿(book)の場合、というif文は問題なく動いているのですが、
その後のカスタムフィールドの中身の比較のところでやはり躓いています。
間違っている部分おわかりになれば、ご教示いただけると幸いです。
PHP
1function section_post_modified( $data, $postarr ) { 2 global $post; 3 $post_id = $post->ID; 4 if ( $data['post_type'] == 'book') { 5 $book_val = get_post_meta( $post_id, 'book_author'); 6 $book_new = $_POST['book_author']; 7 if( $book_val == $book_new ){ 8 unset( $data["post_modified"] ); 9 unset( $data["post_modified_gmt"] ); 10 } 11 } 12 return $data; 13}; 14add_filter( 'wp_insert_post_data', 'section_post_modified', 10, 2 );
回答3件
あなたの回答
tips
プレビュー