Удаление родительского комментария приводит к неправильному отображению дочерних комментариев
И заплатка, решающая эту проблему
Одна из довольно неприятных ошибок в WordPress… Дело в том, что при удалении комментария WordPress не проверяет, есть ли у удаляемого комментария дочерние комментарии. При древовидном отображениии комментариев оставшиеся сиротами комментарии выводятся неправильно — под всеми остальными, нарушая хронологический порядок.
К счастью, есть простое решение.
Сначала патч:
===================================================================
--- wp-includes/comment.php (revision 10475)
+++ wp-includes/comment.php (working copy)
@@ -739,6 +739,8 @@
if ( ! $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->comments WHERE comment_ID = %d LIMIT 1", $comment_id) ) )
return false;
+ $wpdb->update($wpdb->comments, array('comment_parent' => $comment->comment_parent), array('comment_parent' => $comment_id));
+
$post_id = $comment->comment_post_ID;
if ( $post_id && $comment->comment_approved == 1 )
wp_update_comment_count($post_id);
Теперь объяснение: патч добавляет строку в файл wp-includes/comment.php в функцию wp_delete_comment(), которая переназначает дочерние комментарии родителю удаляемого комментария. Если удаляемый комментарий не имеет родителей (является корнем), дочерние комментарии переносятся на верхний уровень.
Тем, кому лень патчить WordPress, привожу полный текст исправленной функции wp_delete_comment():
global $wpdb;
do_action('delete_comment', $comment_id);
$comment = get_comment($comment_id);
if ( ! $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->comments WHERE comment_ID = %d LIMIT 1", $comment_id) ) )
return false;
$wpdb->update($wpdb->comments, array('comment_parent' => $comment->comment_parent), array('comment_parent' => $comment_id));
$post_id = $comment->comment_post_ID;
if ( $post_id && $comment->comment_approved == 1 )
wp_update_comment_count($post_id);
clean_comment_cache($comment_id);
do_action('wp_set_comment_status', $comment_id, 'delete');
wp_transition_comment_status('delete', $comment->comment_approved, $comment);
return true;
}
Фев
2009
Комментарии к статье «Удаление родительского комментария приводит к неправильному отображению дочерних комментариев» (10) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «Удаление родительского комментария приводит к неправильному отображению дочерних комментариев»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


Хотя патч предназначен для самой последней версии WordPress (2.7.1-beta1), тем не менее, он успешно накладывается на любую версию из ветки 2.7
О, отлично, спасибо!
а авторам про ошибку написал про это чтобы исправили в следующем релизе хотя бы?
Сыылка на баг была в самом верху статьи — http://trac.wordpress.org/ticket/9003
Точно, есть. просто у тебя ссылки на статьи и ссылки на теги (которых на порядок больше тут в блоге) ничем не отличаются визуально я их часто и не просматриваю. может стоит их как нибудь цветом или еще как то выделять по другому?
Фикс попал в WordPress, ожидается в 2.7.2
Changeset 10762
Changeset 10763
Опечатка – поправьте.
Спасибо, поправил
Владимир, а в последней версии эта проблема снята?
Да, еще в 2.7.2.