add_action( 'wp_set_comment_status', 'comment_modified', 15, 1 );
function comment_modified( $comment_ID, $comment_status ) {
if ( 1 == $comment_status ) {
$comment_data = get_comment( $comment_ID );
$my_data = array();
$my_data['ID'] = $comment_data->comment_post_ID;
$my_data['post_modified'] = $comment_data->comment_date;
$my_data['post_modified_gmt'] = $comment_data->comment_date_gmt;
wp_update_post( $my_data );
}
}
こんな感じでやってみたのですができませんでした。。。
どこが間違ってますでしょうか?
書き方のヒントを頂けると助かります。
自分なりに調べて下記のコードで思い通りの動きになりました。
が、スマートではないような気がします。。。
add_action( 'wp_set_comment_status', 'comment_modified', 15, 1 );
function comment_modified( $comment_ID ) {
$status = wp_get_comment_status( $comment_ID );
if ( 'approved' == $status ) {
$comment_data = get_comment( $comment_ID );
$my_data = array();
$my_data['ID'] = $comment_data->comment_post_ID;
$my_data['post_modified'] = $comment_data->comment_date;
$my_data['post_modified_gmt'] = $comment_data->comment_date_gmt;
wp_update_post( $my_data );
}
}
問題ありませんでしょうか。。。?
うろ覚えですが、wp_update_post
をたたいたときに、post_modified
, post_modified_gmt
は更新されるはずだったので、
$my_data['post_modified'] = $comment_data->comment_date;
$my_data['post_modified_gmt'] = $comment_data->comment_date_gmt;
は不要かと思います。
ところで第二引数を取るには
add_action( 'wp_set_comment_status', 'comment_modified', 15, 2 );
のようにadd_actionの第4引数を関数へ渡す引数の数にしてください。
(ところでそれだと承認以外のコメントの編集でも発火する気が。)
あと、お節介かもしれませんが、最近コメントのついた記事の一覧などを作るのであれば、WP_Comment_Query
を使う方法もありますね。記事を更新したわけでも無いのに、更新がかかるのは自然では無いのでトラブルの火種になりそう。
// WP_Comment_Query arguments
$args = array (
'order' => 'DESC',
'orderby' => 'comment_date',
);
// The Comment Query
$comment_query = new WP_Comment_Query;
$comments = $comment_query->query( $args );
foreach( $comments as $comment ) {
$post_id = $comment->comment_post_ID; //コメントがついたページのID
$post = get_post( $post_id );
setup_postdata( $post ); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php
endforeach;
wp_reset_postdata();?>
}
Toro_Unit (Hiroshi Urabe)さん、Hinaloeさんありがとうございます!
お二人の助言を参考に下記コードで問題なく動くようになりました。
add_action( 'wp_set_comment_status', 'comment_modified', 15, 2 );
function comment_modified( $comment_id, $comment_status ) {
if ( 'approve' == $comment_status ) {
$comment_data = get_comment( $comment_id );
$my_data = array();
$my_data['ID'] = $comment_data->comment_post_ID;
wp_update_post( $my_data );
}
}
承認以外の動作(編集、ゴミ箱、削除)では動かなかったので大丈夫のようです。
あ、あとこれはWPを掲示板のような形式にして利用しようと思っているので大丈夫かと思います。
WP_Comment_Queryは初めて知ったのですが、コメントの並び替えをする時に使えますね!
ありがとうございます!