Ich habe ein Problem. Ich habe ein PHP -Skript, das die einzelnen Dateidownloads protokolliert, und suche nach einer Möglichkeit, diese Zahl in einzelnen Posts anzuzeigen. Ich habe eine halbherzige Lösung - ein einfaches altes manuelles MySQL-Verbindungsskript, aber ich versuche, es in ein Wordpress-Plugin umzuwandeln (ich möchte, dass es WPDB verwendet). Ich habe versucht, es zu konvertieren, aber ich weiß nicht, was die Wordpress-Alternative zu "mysql_fetch_array" ist. Trotzdem habe ich das ursprüngliche Skript eingefügt unten, sowie meine Fortschritte bei einer Wordpress-freundlichen Version.
Einfache Version:
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 { }
}
Bisherige Wordpress-freundliche Version:
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 { }
}
Verwenden Sie anstelle von $wpdb->query()
$wpdb->get_results()
. Mit dieser Methode können Sie einen Rückgabetyp angeben, damit die Abfrage als assoziatives Array zurückgegeben wird. Zum Beispiel ...
$results = $wpdb->get_results(
"SELECT * FROM mb_download_manager
WHERE filename='" . $namemeta . ".Zip'",
ARRAY_A
);
Dies gibt ein indiziertes Array von assoziativen Arrays zurück, sodass Sie die Ergebnisse durchlaufen können:
foreach( $results as $row ) {
if ( $row['downloads'] == '') // ... and so on
Wenn Sie nicht weiterkommen, überprüfen Sie die Codex-Dokumentation .
Wenn Sie alle Downloads zusammenfassen möchten, müssen Sie zwei Dinge tun:
Bevor Sie also Ihre foreach
-Schleife ausführen, deklarieren Sie einen Download-Zähler:
$counter = 0;
foreach( $results as $row ) {
// etc ...
Diese Variable enthält eine laufende Summe Ihrer Downloads.
Als nächstes müssen Sie die Anzahl der Downloads zu Ihrem Zähler hinzufügen:
$counter = 0;
foreach( $results as $row ) {
$counter += intval( $row['downloads'] );
// etc ...
Die Funktion intval()
nimmt eine gemischte Variable auf und gibt ihren ganzzahligen Wert zurück. So wird die Zeichenfolge "0"
zur Ganzzahl 0
. Auf diese Weise können Sie die Ergebnisse tatsächlich hinzufügen , anstatt die Zeichenfolgen zu verketten (z. B. "1" + "2" = "12"
, aber 1 + 2 = 3
).
Da Sie nur einen einzelnen Wert aus einer einzelnen Spalte möchten, können Sie die Methode get_var anstelle der Abfragemethode verwenden. Auf diese Weise müssen Sie keine Ergebnisse durchlaufen (Sie erhalten das Ergebnis als Zeichenfolge). In Ihrem Fall würden Sie also Folgendes tun:
$downloads = $wpdb->get_var($wpdb->prepare("SELECT downloads FROM mb_download_manager WHERE filename=%s", $namemeta.".Zip"));
Dann können Sie das Ergebnis einfach wiedergeben:
echo $downloads;
Weitere Informationen finden Sie auf der wpdb-Codexseite . Dort finden Sie auch eine lange Liste zusätzlicher wpdb-Methoden, die je nach Ihrer Situation verwendet werden können. Einige von ihnen, wie die Einfügemethode, sind viel einfacher zu verwenden als das Schreiben von direktem SQL.
Beachten Sie auch die Verwendung der Vorbereitungsmethode, die dazu beiträgt, Injektionen und Junk zu vermeiden. Es ist nicht erforderlich, aber es ist eine gute Übung. Beachten Sie auch, dass sich diese Tabelle in Ihrer WordPress-Datenbank befinden muss.