Я использую тему WordPress, которая присуждает пользователям очки (отслеживаемые в метаданных пользователя) для размещения комментариев. Тем не менее, они не получают баллов за ответ на комментарий.
Когда я перемещаю комментарий к корзине, один комментарий вычитается из автора комментария через следующий код:
// Remove 1 point if their comment is removed function deleteAPointFromUser( $comment_id ) { $comment = get_comment( $comment_id ); $authorid = $comment->user_id; $currentPointNumber = get_user_meta( $authorid, 'points', true ); // Decrement comment author's "points" by 1 update_user_meta( $authorid, 'points', $currentPointNumber - 1 ); } add_action( 'trash_comment', 'deleteAPointFromUser' );
Проблема в том, что когда я удаляю ответы на комментарий, точка отчисляется от автора ответа (хотя этот автор никогда не получал точку для ответа в первую очередь).
Я хочу удалить ответы с комментариями, не вычитая точку у своих авторизованных пользователей.
Просто проверьте, имеет ли комментарий родительский элемент до уменьшения точек. get_comment()
запись Codex для функции get_comment()
, вы заметите, что в том виде, в котором вы используете эту функцию, вам будет возвращен объект, содержащий ключи, соответствующие именам wp_comments
таблицы wp_comments
. wp_comments
внимание, что в wp_comments
scehma есть столбец с именем comment_parent
который содержит идентификатор сообщения родителя комментария или по умолчанию равен 0
если комментарий не имеет родителя. Таким образом, вы можете добиться желаемого эффекта с помощью следующего:
function deleteAPointFromUser( $comment_id ) { $comment = get_comment( $comment_id ); // Only decrement user 'points' if the comment being deleted has no parent comment. if( $comment->comment_parent == 0 ) { $authorid = $comment->user_id; $currentPointNumber = get_user_meta( $authorid, 'points', true ); update_user_meta( $authorid, 'points', $currentPointNumber - 1 ); } } add_action( 'trash_comment', 'deleteAPointFromUser' );