Plugin-Entwicklung (Newbie, DB-Abfrage)

  • Okay, ich habe eine Idee, die ich in meinem Blog einsetzen möchte. Dazu muss eine DB-Abfrage her. Ich könnte diese direkt in mein Template schreiben, finde das aber irgendwie... naja, nicht so schön. Also dachte ich mir, schreibe ein Plugin, dann kannst Du nur dieses aufrufen und gut. Wie ich die DB-Abfrage im "normalen PHP" schreiben müsste, weiß ich. Aber wie geht das mit der DB-Abfrage für WP? Ich habe bis jetzt diese Abfrage:

    PHP
    $abfrage = "SELECT feld1, feld2 FROM $wpdb->wp_posts WHERE post_mime_type = 'image/jpeg' ORDER BY RAND() LIMIT 5";
    $results = $wpdb->get_results( $abfrage );

    Erst einmal: Ist das richtig? Ich habe mir das aus anderen Plugins so zusammengereimt. Eine schöne Anleitung dazu habe ich nicht gefunden... :-(

    Wie geht es weiter? Jetzt müssen die abgefragten Werte irgendwie ausgegeben werden. Da dachte ich (zu Testzwecken) an:

    PHP
    for ( $x = 0; $x < count ($results); $x++;){
     echo "Feld1: ". ??? ."<br />";
     echo "Feld2: ". ??? ."<br /><br />";		
    }
    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Okay. Danke für den Link (und das Beispiel). Allerdings bekomme ich mit der Abfrage (mit meinen Feldern versteht sich) folgende Fehlermeldung:

    Zitat

    Fatal error: Call to a member function on a non-object in XXX on line 25

    Dabei ist in der genannten Zeile die DB-Abfrage:

    PHP
    $abfrage = $wpdb->get_results("SELECT post_parent, guid FROM $wpdb->wp_posts WHERE post_mime_type = 'image/jpeg'");

    Da bricht er also irgendwie ab... :( Woran liegt's?

  • Ah! Okay. Die Fehlermeldung ist weg. :-D Allerdings wird auch nichts angezeigt. Nach meiner Abfrage (s.o.) habe ich zu Testzwecken erst einmal das Beispiel angewendet:

    PHP
    foreach ($abfrage as $ergebnis) {
     echo $ergebnis->post_parent;
     echo $ergebnis->guid;
    }

    Ohne Ergebnis. Also wirklich ohne irgendwas. Keine Ausgabe. Nichts. *hmmm*

  • Hö? Das ist ja seltsam... Wenn ich eine ganz normale DB-Abfrage in ganz normalem PHP mache, dann greift er wunderbar auf alles zu. So, wie ich das oben angegeben habe. Aber tatsächlich: wenn ich das wp_ von wp_posts entferne, greift er drauf zu. Und das, obwohl in der DB selber das Feld wirklich wp_posts heißt! :shock:

    Allerdings zeigt er nur guid, nicht post_parent an. Heißt das in der WP-DB-Abfrage etwa auch irgendwie anders? :confused:

    Und an marX: var_dump zeigt alles richtig an. Sogar den Wert für post_parent. Hingegen print_error zeigt (wohl bemerkt jetzt mit der Änderung von Alphawolf) nichts an. Seltsam, dass er mit var_dump die einen Werte ausliest... *hmm*

    [Edit: *lalala* Nene, ich hatte noch einen Typo drin. Ich hatte post_parents, obwohl es post_parent heißt... *flöt*]

  • Hö? Das ist ja seltsam... Wenn ich eine ganz normale DB-Abfrage in ganz normalem PHP mache, dann greift er wunderbar auf alles zu. So, wie ich das oben angegeben habe. Aber tatsächlich: wenn ich das wp_ von wp_posts entferne, greift er drauf zu. Und das, obwohl in der DB selber das Feld wirklich wp_posts heißt! :shock:


    Das ist gewollt. Nicht bei jedem User heißen die Tabellen wp_posts etc. In der wp-config.php kann man ja das Präfix ändern, sodass die Tabelle auch wp2_posts heißen könnte. Und mit $wpdb->posts greifst du auf die *_posts Tabelle zu, egal wie das vom Nutzer gewählte Präfix lautet.

    wpseek.com - Die WordPress-Code-Suchmaschine

  • var_dump zeigt alles richtig an. Sogar den Wert für post_parent. Hingegen print_error zeigt (wohl bemerkt jetzt mit der Änderung von Alphawolf) nichts an. Seltsam, dass er mit var_dump die einen Werte ausliest... *hmm*


    var_dump() zeigt an, was in einer Variablen drin steht. In deinem Fall also die Werte die die DB-Abfrage zurückliefert. print_errors() ist ne WPDB-methode, die einen eventuell aufgetretenen Fehler ausgibt. Wenn in var_dump() was ausgegeben wird (nicht FALSE), dann muss print_errors() ja leer sein, da kein Fehler aufgetreten ist. ;-)

    Alles andere hat Alphawolf ja schon erklärt...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!