放棄された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用のこの非常に便利なバッジシステムの実用版を入手できるように、誰かがこの問題を解決するのを手伝ってくれる?
こんにちはプラグインやテーマの作者!インターネット上で上記のエラーを検索した後、この投稿を見つけた可能性があります:“ PHP Warning:wpdb :: prepare()の引数2が見つかりません。”
そのため、これは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
に置き換えてから、不足している2番目のパラメーターとして$args['user_ID']
を使用する必要があります。
$wpdb->prepare(
"
SELECT COUNT(*)
FROM $wpdb->comments
WHERE user_id = %d
AND comment_approved = '1'
",
$args['user_ID'] // %d
)
2番目のものは似ているはずです:
$wpdb->prepare(
"
SELECT COUNT(*)
FROM $wpdb->posts
WHERE post_author = %d
AND post_status = 'publish'
AND post_type = 'post'
",
$args['user_ID'] // %d
)