Как предотвратить удаление комментариев при удалении сообщения

Как и в заголовке: «Как я могу запретить WordPress удалять комментарии для комментариев при удалении сообщения?

То, что я пытаюсь сделать, – это то, что я хочу объединить все комментарии из разных сообщений в сообщения, относящиеся к eachother, по posttitle или предопределенному мета-ключу в сообщении. Иногда я удаляю сообщение, которое является устаревшим, и я все еще хочу, чтобы эти комментарии отображались для удаленных сообщений.

У меня уже есть часть компиляции комментариев для моих функций. Php. (по-прежнему нужно немного скорректировать часть запроса для получения результатов на основе метаданных комментария вместо id сообщения комментария).

function multiple_comment_post_id_query_filter( $query ) { //todo: //get postid's from comments where a certain meta value is set. Database table wp_commentmeta //the meta value is extracted from the post meta value with the same id //when someone adds a comment, the comment meta will be included //put the captured post id's into an array with variable $post_ids $post_ids = array ( 1, 2, 3, 4 ); if ( FALSE === strpos( $query, 'comment_post_ID = ' ) ) { return $query; // not the query we want to filter } remove_filter( 'query', 'multiple_comment_post_id_query_filter' ); $replacement = 'comment_post_ID IN(' . implode( ',', $post_ids ) . ')'; return preg_replace( '~comment_post_ID = \d+~', $replacement, $query ); } add_filter( 'query', 'multiple_comment_post_id_query_filter' ); 

Я предпочитаю не редактировать основные файлы в случае, если мне нужно обновить (если нет другого возможного способа, я сделаю это …)

Чтобы предотвратить before_delete_post удаления комментария в before_delete_post и отфильтровать query для связанных комментариев, чтобы процедура удаления не могла их найти и удалить.

PHP 5.3 требуется:

 add_action( 'before_delete_post', function( $post_id ) { add_filter( 'query', function( $query ) use ( $post_id ) { $find = 'WHERE comment_parent = '; FALSE !== strpos( $query, $find . $post_id ) and $query = str_replace( $find . $post_id, $find . '-1', $query ); return $query; }); }); 

Вот шумная версия старой школы:

 add_action( 'before_delete_post', array ( 'T5_Prevent_Comment_Deletion', 'start' ) ); class T5_Prevent_Comment_Deletion { protected static $post_id = 0; public static function start( $post_id ) { self::$post_id = $post_id; add_filter( 'query', array ( __CLASS__, 'hide_comments' ) ); } public function hide_comments( $query ) { $find = 'WHERE comment_parent = ' . self::$post_id; if ( FALSE !== strpos( $query, $find ) ) { $query = str_replace( $find, 'WHERE comment_parent = -1', $query ); remove_filter( 'query', array ( __CLASS__, 'hide_comments' ) ); } return $query; } }