私は問題があります。個々のファイルのダウンロードを追跡するPHPスクリプトがあります。個々の投稿にその番号を表示する方法を探しています。私は半分手っ取り早い解決策 - 普通のMySQL手動接続スクリプトを持っていますが、私はそれをWordpressプラグインとして使うために変換しようとしています(私はそれにWPDBを使いたいです)。 変換しようとしましたが、 'mysql_fetch_array'に代わるWordpressのバージョンがわかりません。とにかく、元のスクリプトを含めました。以下に、Wordpressにやさしいバージョンでの私の進歩と同様に。
プレーンバージョン:
function mb_download_count() {
global $post;
if (get_post_meta($post->ID, 'zipname', TRUE)) {
$namemeta = get_post_meta($post->ID, 'zipname', TRUE);
require $_SERVER['DOCUMENT_ROOT'].'/downloader-connect.php';
$result = mysql_query("SELECT * FROM mb_download_manager
WHERE filename='".$namemeta.".Zip'");
// get the first (and hopefully only) entry from the result
$row = mysql_fetch_array( $result );
// Print out the contents of each row into a table
if ($row['downloads'] == '') { echo ('0'); } else {
echo $row['downloads']; }
} else { }
}
これまでのWordpress用のバージョン:
function mb_download_count() {
global $wpdb;
global $post;
if (get_post_meta($post->ID, 'zipname', TRUE)) {
$namemeta = get_post_meta($post->ID, 'zipname', TRUE);
$result = $wpdb->query("SELECT * FROM mb_download_manager
WHERE filename='".$namemeta.".Zip'");
$row = mysql_fetch_array( $result );
if ($row['downloads'] == '') { echo ('0'); } else {
echo $row['downloads']; }
} else { }
}
$wpdb->query()
を使用する代わりに、$wpdb->get_results()
を使用してください。このメソッドでは、クエリが連想配列として返されるように戻り型を指定できます。例えば ...
$results = $wpdb->get_results(
"SELECT * FROM mb_download_manager
WHERE filename='" . $namemeta . ".Zip'",
ARRAY_A
);
これは連想配列のインデックス付き配列を返します...そのため、結果を繰り返し処理できます。
foreach( $results as $row ) {
if ( $row['downloads'] == '') // ... and so on
動けなくなった場合は、 Codexのドキュメント を再確認してください。
すべてのダウンロードを集計したい場合は、2つのことをする必要があります。
foreach
ループを実行する前に、ダウンロードカウンタを宣言してください。
$counter = 0;
foreach( $results as $row ) {
// etc ...
この変数はダウンロードの現在の合計を保持します。
次に、ダウンロード数をカウンターに追加する必要があります。
$counter = 0;
foreach( $results as $row ) {
$counter += intval( $row['downloads'] );
// etc ...
intval()
関数は混合変数を取り込んでその整数値を返します。そのため、文字列"0"
は整数0
になります。これにより、文字列を連結するのではなく、実際に結果を追加することができます(たとえば、"1" + "2" = "12"
と1 + 2 = 3
)。
単一の列から単一の値を取得したいだけなので、queryメソッドの代わりにget_varメソッドを使用できます。そうすれば、結果をループする必要はありません(結果を文字列として取得します)。だからあなたの場合は、次のようにします。
$downloads = $wpdb->get_var($wpdb->prepare("SELECT downloads FROM mb_download_manager WHERE filename=%s", $namemeta.".Zip"));
それからあなたはただ結果をエコーすることができます:
echo $downloads;
wpdb codexページ を参照してください。ここには、状況に応じて使用できるその他のwpdbメソッドの長いリストもあります。 insertメソッドのようなそれらのいくつかは、ストレートなSQLを書くよりはるかに使いやすいです。
ああ、また、prepareメソッドの使用に注意してください。これはインジェクションやジャンクを防ぐのに役立ちます。必須ではありませんが、それは良い習慣です。このテーブルはあなたのWordPressデータベースにある必要があることにも注意してください。