Без правки файла wp-includes\comment.php, по-моему, не обойтись. Но в этом случае изменения потеряются при обновлении версии.
Начиная со строки 607 есть код:
// Simple duplicate check
// expected_slashed ($comment_post_ID, $comment_author, $comment_author_email, $comment_content)
$dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND comment_approved != 'trash' AND ( comment_author = '$comment_author' ";
if ( $comment_author_email )
$dupe .= "OR comment_author_email = '$comment_author_email' ";
$dupe .= ") AND comment_content = '$comment_content' LIMIT 1";
if ( $wpdb->get_var($dupe) ) {
do_action( 'comment_duplicate_trigger', $commentdata );
if ( defined('DOING_AJAX') )
die( __('Duplicate comment detected; it looks as though you’ve already said that!') );
wp_die( __('Duplicate comment detected; it looks as though you’ve already said that!') );
}
Вот его нужно закоментировать. Чтобы было так:
// Simple duplicate check
// expected_slashed ($comment_post_ID, $comment_author, $comment_author_email, $comment_content)
//$dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND comment_approved != 'trash' AND ( comment_author = '$comment_author' ";
//if ( $comment_author_email )
// $dupe .= "OR comment_author_email = '$comment_author_email' ";
//$dupe .= ") AND comment_content = '$comment_content' LIMIT 1";
//if ( $wpdb->get_var($dupe) ) {
// do_action( 'comment_duplicate_trigger', $commentdata );
// if ( defined('DOING_AJAX') )
// die( __('Duplicate comment detected; it looks as though you’ve already said that!') );
//
// wp_die( __('Duplicate comment detected; it looks as though you’ve already said that!') );
//}
Что-то я не подумал сразу, что если закомменитровать так, то и все юзеры смогут оставлять одинаковые коменты. Если нужно только для админа это выключить, то можно что-то типа такого написить:
// Simple duplicate check
// expected_slashed ($comment_post_ID, $comment_author, $comment_author_email, $comment_content)
if ($comment_author_email != '{ваш_email}') {
$dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND comment_approved != 'trash' AND ( comment_author = '$comment_author' ";
if ( $comment_author_email )
$dupe .= "OR comment_author_email = '$comment_author_email' ";
$dupe .= ") AND comment_content = '$comment_content' LIMIT 1";
if ( $wpdb->get_var($dupe) ) {
do_action( 'comment_duplicate_trigger', $commentdata );
if ( defined('DOING_AJAX') )
die( __('Duplicate comment detected; it looks as though you’ve already said that!') );
wp_die( __('Duplicate comment detected; it looks as though you’ve already said that!') );
}
}
где вместо {ваш_email} вставить email админа.
Можно, конечно, получать мыло скриптом, но лень писать это 🙂
Без правки файла wp-includes\comment.php, по-моему, не обойтись.
Вполне можно обойтись — например, изменив запрос на поиск дубликатов с помощью фрагмента в functions.php
активной темы:
function remove_duplicate_comment_check($query) {
global $wpdb, $user_level;
if ( 10 == $user_level )
$query = preg_replace(
"/(SELECT comment_ID FROM $wpdb->comments WHERE .* comment_content = '.*') LIMIT 1/",
"$1 AND 0 = 1 LIMIT 1",
$query
);
return $query;
}
if ( !empty($_POST['comment']) )
add_filter('query', 'remove_duplicate_comment_check');
Сергей, спасибо! Как всегда спасли. Этот вариант больше подходит. всё должно быть универсально и независящее от update.
спасибо всем!