1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

WP 6.x wpdb in eine eigene Klasse

Dieses Thema im Forum "Allgemeines" wurde erstellt von Javianer, 18. Mai 2023.

  1. Javianer

    Javianer Member

    Registriert seit:
    16. Oktober 2022
    Beiträge:
    22
    Zustimmungen:
    0
    Guten Tag,

    ich möchte eine eigene Klasse schreiben die, die $wpdb Variable enthält und zwei Methoden davon Kapselt. Die Klasse sieht wie folgt aus:
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Nun möchte ich zum Anzeigen der Archive Seiten diese Klasse benutzen. Beide Klassen sind in der selben Datei, ich weiß leider nicht wie ich das geändert bekomme. Doch das ist erst einmal nicht das Problem!
    Es funktioniert nicht. Ich erhalte einen Kritischen Fehler!

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Leider kenne ich mich mit PHP nicht so gut aus, in Java z. B. funktioniert ein solches Konstrukt. Ist es vielleicht nicht möglich in PHP eine neue Instanz in einer Klasse zu erstellen? Dann müsste die Helper Klasse vorher initialisiert werden und dem Printer im Construktor übergeben werden.

    Kann mir jemand dabei helfen?
     
  2. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.681
    Zustimmungen:
    1.786
  3. Javianer

    Javianer Member

    Registriert seit:
    16. Oktober 2022
    Beiträge:
    22
    Zustimmungen:
    0
    Das ist nicht mein gewünschtes Ergebnis.
    Ich möchte eigentlich einfach nur ein Objekt in einer Klasse instanziieren. Funktioniert so etwas unter PHP? Darüber finde ich keine Auskunft!

    Mit der Helper Klasse möchte ich nur das $wpdb weg kapseln, es werden mehrere Printer Klassen geben. Ich müsste sonst jedes mal das $wpdb Konstrukt in die verschiedenen Klassen kopieren. Kopierter Code ist misst!

    Wenn das so nicht funktioniert werde ich es Kopieren müssen doch dann werde ich es auch nicht mithilfe von Objekten lösen sondern prozedural weiter arbeiten.
     
  4. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.681
    Zustimmungen:
    1.786
    Vielleicht musst Du Dein Problem genauer erklären. Normalerweise nutzt man in WordPress dafür die vorhandene sog. Loop mit der vorhandenen API.
     
  5. Javianer

    Javianer Member

    Registriert seit:
    16. Oktober 2022
    Beiträge:
    22
    Zustimmungen:
    0
    Also mein erstes Problem ist, das ich gar nicht weiß ob es überhaupt mit PHP so funktioniert!

    Ich habe gelernt mit Java das ich in einer Klasse eine Instanz einer anderen Klasse erzeugen kann. Das ganze sieht dann wie folgt aus:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Dieser Mitarbeiter kann nun in einer Abteilung genutzt werden:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Funktioniert so etwas ebenfalls auch in PHP? Derzeit habe ich das Gefühl das es schon daran scheitert! Weißt du das zufällig?
    Sinn macht das Beispiel nicht, es geht nur um die Frage ob so etwas Funktioniert. Danach klären wir den rest
     
  6. threadi

    threadi Well-Known Member

    Registriert seit:
    9. Oktober 2020
    Beiträge:
    2.014
    Zustimmungen:
    405
    Du müsstest den Kritischen Fehler den du erhältst übers Error-Log mal genauer anschauen. Dort würdest Du erkennen, dass

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    die Ursache ist.

    Schreib diese Klasse mal so um:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Wenn auch das nicht geht, schau unbedingt ins Error-Log. Das sagt mehr aus als Java-Logs in solchen Fällen oft ;)
     
    Javianer gefällt das.
  7. Javianer

    Javianer Member

    Registriert seit:
    16. Oktober 2022
    Beiträge:
    22
    Zustimmungen:
    0
    Genau das hat den Problem gelöst!
    Ich konnte mir auch nur schlecht vorstellen das ein solches Konzept in PHP nicht funktionieren würde. Nur wird es einem nirgendwo so erklärt!

    Danke für eure Hilfe :)
    @b3317133 wir nutzen die loop auch weiterhin, nur speichern wie die Daten nicht mehr in der Postmeta Tabelle. Wir haben das ganze nicht gut aufgebaut, denn wir rufen für jeden Wert den wir erhalten möchten eine Methode auf, die einen SQL Abfrage an die DB macht und uns diesen Wert zurück gibt. Nun dachte ich, wir lassen uns einfach alle Wert zurück geben speichern die Werte in einem Objekt und beim loop rufen wir nur die Werte ab die im Objekt gespeichert sind. Damit sparen wir Hunderte von doppelte SQL Abfragen.

    Da wir uns leider nicht so gut mit PHP auskennen sind das "nur" Notdürftige Programmierungen. Ich habe bereits begonnen PHP zu lernen, da ich aus der Java Ecke komme ist es ungewohnt doch das macht nix :)
     
  8. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.681
    Zustimmungen:
    1.786
    Dein eigentliches Konzept bzw. Problem ist leider weiterhin unklar.

    Normalerweise nutzt man für Beziehungen und Daten in WordPress sog. Custom Post Types und Custom Taxonomies und bei Bedarf die Custom Fields API für weitere Metadaten inklusive deren intern vorhandene unsichtbare Cache Funktionalitäten.

    Wenn man einzelne Dinge selbst nachbauen und dann doch in WordPress integrieren will, kommt es erfahrungsgemäss oft zu weiteren Problemen, die erst im Verlauf klar werden.

    Daher die Frage nach dem Sinn und Zweck der ganzen Herangehensweise.
     
  9. Javianer

    Javianer Member

    Registriert seit:
    16. Oktober 2022
    Beiträge:
    22
    Zustimmungen:
    0
    Die Custom Post Types benutze ich auch.
    Es geht nur darum, das viele Daten gespeichert werden und die alle in PostMeta gelandet sind. Um das zu entzerren habe ich für die CPTs Mitglied, Sportler, Leitung, Athlet und so weiter extra Tabellen in der Datenbank angelegt. In diesen werden alle Daten gespeichert und es wird ein Post angelegt der auf diese Daten zeigt :)
    Vermutlich auch nicht ganz so Wordpress konform doch anders war es mir nicht klar. Das Problem ist das ich keine Posts lösche sondern immer nur neue Hinzukommen :eek: das bedeutet PostMeta wird nur immer und immer größer.

    Wird es jetzt etwas klarer? Oder ist das misst war ich da gemacht habe?
     
  10. r23

    r23 Well-Known Member

    Registriert seit:
    9. Dezember 2006
    Beiträge:
    7.361
    Zustimmungen:
    589
    Der Code ist sinnvoll, aber nicht optimal. Hier sind einige Verbesserungsvorschläge:

    • Verwende keine globalen Variablen, sondern injiziere die Abhängigkeiten in den Konstruktor. Das macht deinen Code testbarer und modularer.
    • Verwende Typdeklarationen für die Parameter und Rückgabewerte deiner Funktionen. Das macht deinen Code sicherer und lesbarer.
    • Verwende aussagekräftige Namen für deine Variablen und Funktionen. Das macht deinen Code verständlicher und wartbarer.
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
    Javianer gefällt das.
  11. Javianer

    Javianer Member

    Registriert seit:
    16. Oktober 2022
    Beiträge:
    22
    Zustimmungen:
    0
    Ich habe noch ein Problem bei meinem versuch hier. Wenn ich das ganze nun versuche und diese zwei Klassen hier in eine eigene helper.php in das Child Theme packe bekomme ich auf der Seite nur das Menü angezeigt und danach hängt es sich auf!

    Hier einmal die zwei Klassen.
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Ich hab leider keinen guten Weg gefunden als das ganze über eine count Variable zu machen. Was ich hier genau mache ist, ich nehme mir alle Daten aus der Tabelle des Post Type z. B. Mitglied. Dann kommt die Archivseite von der Mitglieder Seit die sieht so aus
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Wenn ich nun oben jedoch in der Mitglied Archiv Seite ein require_once('helper.php'); einfüge hängt sich die Seite auf :(

    Vermutlich ist das ganze keine schöne Lösung in HTML und PHP jedoch bekomme ich es leider nicht besser hin. Vielleicht kann nochmal jemand drüber schauen und mir weiterhelfen :)
     
  12. Javianer

    Javianer Member

    Registriert seit:
    16. Oktober 2022
    Beiträge:
    22
    Zustimmungen:
    0
    Fehler gefunden hier
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    muss so lauten
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Dann klappt es. Kann jemand trotzdem mal drüber schauen und mir nochmal Verbesserungsvorschläge geben?
     
  13. Shadow

    Shadow Well-Known Member

    Registriert seit:
    12. Februar 2007
    Beiträge:
    2.972
    Zustimmungen:
    58
    wie schon erwähnt, Wordpress hat für Content Daten (und alles ander) die WP-Tabellen und daher wp-post und wp-postmeta https://codex.wordpress.org/Database_Description, damit man idealst mit den wordpress classen und funktionen weiterarbeiten kann.
    wenn du mit eigenen Tabellen experimentierst, kannst du mit weiteren WP API Funktionen, kaum Lösungen (themen und Plugins) bauen und wir können dir nicht sinnvoll weiterhelfen. Die Verbesserung ist mit den Boardfunktionen, Tabellen usw.. von WordPress zu arbeiten. und sich mit der Development Doku von WordPress (und PHP) zu beschäftigen.
     
    Javianer und Gast 100035 gefällt das.
  14. Javianer

    Javianer Member

    Registriert seit:
    16. Oktober 2022
    Beiträge:
    22
    Zustimmungen:
    0
    Vielen Dank für deine Antwort.

    Doch das werde ich so nicht tun, schon aus reinen Performance gründen! Wordpress speichert sämtliche Daten in postmeta und post ab, dass ist ein Problem für mich! Es werden sehr viele Daten gespeichert und es gibt auch viele SQL Abfragen die (über 1 Jahr Erfahrung mit Board WP mitteln) sehr schwer damit abzubilden sind. So werden die SQL Abfragen unnötig Kompliziert, lang und es müssen mehr erzwungen werden. Das kostet alles Zeit und Ressourcen! Gründe genug es anders zu machen.

    Wenn ich Zeit finde werde ich mich nochmal mehr mit dem Thema auseinander setzen, erst einmal baue ich das ganze so jetzt um und Fertig :) Danach sehe ich weiter.

    Wobei der eigentliche Post sich ja auch mehr auf eine PHP spezifische Frage konzentriert :D nicht wirklich WP Kram sry!
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden