既存のコメント・返信用の連番データ付与する
コメントのメタ情報として記事ごとの連番データを追加します。
連番データ作成用のテンポラリーテーブルを作成
/* テンポラリテーブル作成
*/
CREATE TABLE `temp_test_commentmeta` (
`comment_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
`meta_key_name` varchar(255) DEFAULT NULL,
`rownum` longtext,
`group_id` longtext
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
コメントテーブルからテンポラリーテーブルに連番を挿入
/* テンポラリテーブルに挿入
*/
INSERT INTO `temp_test_commentmeta` (comment_id, meta_key_name, rownum, group_id)
SELECT
wp_comments.comment_ID AS comment_id,
'comment_number_for_postid' AS meta_key_name,
@rownum := IF(@prev_group_id = comment_post_ID, @rownum + 1, 1) AS rownum,
@prev_group_id := comment_post_ID as group_id
FROM
wp_comments,
(select @rownum := 0) hoge,
(select @prev_group_id := '') fuga
ORDER BY
comment_post_ID,
comment_ID ASC
メタテーブルにデータを反映
/* 本番 */
INSERT INTO `wp_commentmeta` (meta_id, comment_id, meta_key, meta_value)
SELECT NULL, comment_id, 'comment_number_for_postid', rownum
FROM temp_test_commentmeta
以上で既存のコメントのメタ情報に連番を追加することができました。
新規コメント投稿時に連番をメタ情報として追加する
既存のメタ情報の最大値から1プラスしたものをmeta情報として追加します。
// コメント連番付与
function custom_comment_post_comment_number( $comment_id ){
global $wpdb;
// post_id 取得
$post_id = $wpdb->get_var("SELECT comment_post_ID FROM wp_comments WHERE comment_ID = ".$comment_id." LIMIT 1;");
// コメント最大値取得
$max_count = $wpdb->get_var("SELECT meta_value FROM wp_commentmeta LEFT JOIN wp_comments ON wp_commentmeta.comment_id = wp_comments.comment_ID WHERE wp_comments.comment_post_ID = ".$post_id ." AND wp_commentmeta.meta_key = 'comment_number_for_postid' ORDER BY (wp_commentmeta.meta_value + 0) DESC LIMIT 1;");
if ( !is_numeric($max_count) ){
$max_count=0;
}
$max_count++;
add_comment_meta( $comment_id, 'comment_number_for_postid', $max_count );
}
add_action('comment_post', 'custom_comment_post_comment_number');
ポイントは meta_value はlongtext型のためORDER BY句で数字としてソートするために、 ORDER BY (wp_commentmeta.meta_value + 0) としています。※MySQLの場合。
そして、取得した値の有効性チェックは is_numeric で判定するとうまく動作します。
コメント