Yoast Duplicate postによる記事複製時、記事のいいね数をリセットする

Yoast Duplicate postによる記事複製時、記事のいいね数をリセットする

記事の複製機能といいね機能があるサイト運用案件で、
「記事の複製時、複製元のいいね数を引き継いでしまうので、いいね数だけリセットできないか?」
という問い合わせを頂いたのですが、探してみると意外と該当記事が見つからず、検証して解決しましたので記事として残します。

前提

  1. 記事複製機能は、Yoast Duplicate postを導入
  2. いいね機能は、WP-PostRatings、またはFavoritesを導入

解決までの調査過程

  1. まずYoast Duplicate postに使えそうなフックがないか公式のFilters and actionsを確認する。この中で、dp_duplicate_postは記事複製直後に発火するそうなので、「記事複製直後にいいね関連のデータをクリアする」ように実装すれば、実現できそうと想定。
  2. 次に「いいね関連のデータ」はデータベースのどこに登録されるか、いいね数が1以上と0の時のデータの持ち方を確認。プラグインのいいね数登録に該当するソースとテーブルデータを確認する。wp_postmetaに格納されることがわかった。
  3. 「記事複製直後にいいね関連のデータをクリアする」ように実装し、動作確認。

WP-PostRatingsの実装例

いいね数が0の記事は、ratings_users、ratings_score、ratings_average自体がwp_postmetaテーブルから削除される仕様でしたので、記事複製直後にこの3つが削除されるように実装しました。


function my_custom_dp_duplicate_post( $post_id ) {
    delete_post_meta($post_id, 'ratings_users');
    delete_post_meta($post_id, 'ratings_score');
    delete_post_meta($post_id, 'ratings_average');
}
// Yoast Duplicate postのソースadmin-functions.phpの中で実行している
// add_action( 'dp_duplicate_post', 'duplicate_post_copy_post_meta_info', 10, 2 ); の直後に実行するように優先順位を設定
add_action( 'dp_duplicate_post', 'my_custom_dp_duplicate_post' , 15, 2);


Favoritesの実装例

いいね数が0の記事は、simplefavorites_countの値が0になる仕様でしたので、記事複製直後にカウント数を0に更新するように実装しました。


function my_custom_dp_duplicate_post( $new_post_id ) {
    update_post_meta( $new_post_id, 'simplefavorites_count', 0  );
}
// Yoast Duplicate postのソースadmin-functions.phpの中で実行している
// add_action( 'dp_duplicate_post', 'duplicate_post_copy_post_meta_info', 10, 2 ); の直後に実行するように優先順位を設定
add_action( 'dp_duplicate_post', 'my_custom_dp_duplicate_post' ,15 ,2);


検証時は、管理画面、サイト表示だけでなくテーブルデータも想定通り更新されているか確認しました。

いいね数以外にも応用可能だと思います。参考になれば幸いです。

SNSシェア

WP TECH WordPress技術専門 Tips

コーポレートサイトへ

WP TECH WordPress技術専門 Tips

採用サイトへ