Stackoverflow тип плагина значка, дающий предупреждения в WordPress 3.5

Я изменил заброшенную форму плагина с помощью Stackoverflow для работы с WordPress 3.4.2, и это действительно так. Полный скрипт для этого находится здесь: http://pastebin.com/Ta91zXiL

При обновлении до WordPress v3.5 я получаю эти предупреждения при публикации публикации (или публикации комментария):

Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 342 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 342 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 342 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 355 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 355 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 342 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 342 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 342 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 355 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Missing argument 2 for wpdb::prepare(), called in /public_html/wp-content/plugins/rockhoist-badges/rh-badges.php on line 355 and defined in /public_html/wp-includes/wp-db.php on line 990 Warning: Cannot modify header information - headers already sent by (output started at /public_html/wp-includes/wp-db.php:990) in /public_html/wp-includes/pluggable.php on line 876 

Таким образом, это похоже на строки 342 и 355:

 function rhb_get_user_comment_count( $args = '' ) { global $wpdb; $comment_count = $wpdb->get_var($wpdb->prepare( "SELECT COUNT(*) FROM " . $wpdb->prefix . "comments WHERE user_id = " . $args['user_ID'] . " AND comment_approved = '1'" ) ); // line 342 return $comment_count; } function rhb_get_user_post_count( $args = '' ) { global $wpdb; $post_count = $wpdb->get_var($wpdb->prepare( "SELECT COUNT(*) FROM " . $wpdb->prefix . "posts WHERE post_author = " . $args['user_ID'] . " AND post_status = 'publish' AND post_type = 'post'" ) ); // line 355 return $post_count; } 

Я пытался понять эти предупреждения весь день, но не смог. Может ли кто-нибудь помочь мне решить эту проблему, чтобы у нас была рабочая версия этой очень полезной системы значков для WP 3.5?

Solutions Collecting From Web of "Stackoverflow тип плагина значка, дающий предупреждения в WordPress 3.5"

Ведущий разработчик Nacin отвечает на этот вопрос :

Привет, плагин или автор темы! Возможно, вы нашли это сообщение после поиска в Интернете ошибки выше: «PHP Warning: Отсутствует аргумент 2 для wpdb :: prepare ()».

Итак, это новое предупреждение в 3.5. Никакие сайты не сломаны, все в порядке, как раньше. Но это действительно то, что вам нужно посмотреть, потому что вы можете подвергать своих пользователей возможной уязвимости SQL-инъекции. Теперь это не весело!

Прочтите остальные, для дальнейшего объяснения.

Что касается восстановления существующего кода:

 $wpdb->prepare( " SELECT COUNT(*) FROM " . $wpdb->prefix . "comments WHERE user_id = " . $args['user_ID'] . " AND comment_approved = '1' " ) 

Сначала очистите его, избавившись от ненужной конкатенации строк и $wpdb->comments для таблицы комментариев:

 $wpdb->prepare( " SELECT COUNT(*) FROM $wpdb->comments WHERE user_id = $args['user_ID'] AND comment_approved = '1' " ) 

Теперь предупреждение связано с этой частью запроса:

 WHERE user_id = $args['user_ID'] 

Вам нужно заменить $args['user_ID'] на $d , а затем использовать $args['user_ID'] как отсутствующий, второй параметр:

 $wpdb->prepare( " SELECT COUNT(*) FROM $wpdb->comments WHERE user_id = %d AND comment_approved = '1' ", $args['user_ID'] // %d ) 

Второй должен быть схожим:

 $wpdb->prepare( " SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = %d AND post_status = 'publish' AND post_type = 'post' ", $args['user_ID'] // %d )