Beiträge von Javianer

    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!

    Fehler gefunden hier

    PHP
    protected DatabaseHelper $helper = null;


    muss so lauten

    PHP
    protected  $helper = null;

    Dann klappt es. Kann jemand trotzdem mal drüber schauen und mir nochmal Verbesserungsvorschläge geben?

    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.

    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

    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 :-)

    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?

    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 :-)
    @[size=14]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 :-) [/SIZE]

    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
    class Mitarbeiter {
    String vorname, nachname;
    }

    Dieser Mitarbeiter kann nun in einer Abteilung genutzt werden:

    Code
    class Abteilung {
    Mitarbeiter leitung = new Mitarbeiter("Vorname", "Nachname");
    ...
    }

    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

    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.

    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:

    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
    class Printer {
        private $helper = new Helper();
        private $table_name;
      
        public function create_data($table) {
            $this->table_name = $this->helper->get_prefix() . $table;
            $sql = "SELECT * FROM $this->table_name";
            $this->archiv = $this->helper->get_results($sql);
        }
    }

    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?

    Danke für die Antwort.

    Leider kann ich damit nichts anfangen!

    Was ich benötige ist eine Programmiertechnische Antwort. Wieso sollte ich auf verschiedenen Seiten die Funktion von oben jedes mal bemühen wenn Wordpress (der Benutzer) weiß welche Rolle er hat?
    Ich möchte nur einmal an einer Stelle so etwas tun wie z. B.:

    PHP
    $rolle_footbal = user_has_role($user_id, 'footbal');
    $rolle_etc ...

    Diese Variable muss jetzt nur für sämtliche Archive- und Single Seiten bekannt gemacht werden!
    Dann benötigt man nicht immer wieder einen Funktionsaufruf und schreibt in seiner IF-Anweisung nur noch

    PHP
    //Hier kommt Code der nur von Footballern gesehen wird
    
    
    if($rolle_football) { ... }

    Meine Anfangsfrage war wohl nicht gut gestellt. Hat jemand einen Plan wie so etwas in PHP und mithilfe von Wordpress erreicht werden kann?

    Erreicht man so etwas vielleicht mithilfe eines Plugins in dem man Variablen global definiert und diese dann in ganz Wordpress nutzen kann? Dazu noch etwas wie sieht es bei einem solchen Vorgehen im Punkte Sicherheit aus?

    Vermutlich sind diese Fragen hier falsch da sie zu wenig mit Wordpress zu tun haben oder`?

    Hallo zusammen,

    ich arbeite derzeit, mehr aus Spaß und Interesse, an einer Wordpress Seite die nur Lokal läuft.
    Auf dieser Seite habe ich nun einige Rollen angelegt wie z. B.
    Fußball, Football, Handball, Tennis, Nur lesen und ein paar weitere Sportarten.

    Nun möchte ich auf verschiedenen Seiten gewisse Zugriffsrechte aussprechen.
    Es sind beispielsweise Buttons die jemand mit der Rolle Fußball und Football sieht und der Rest eben nicht. Dazu habe ich eine Funktion geschrieben:

    PHP
    function user_has_role($user_id, $role_name) {
        $user_meta = get_userdata($user_id);
        $user_roles = $user_meta->roles;
    
    
        return in_array($role_name, $user_roles);
    }

    Das Problem ist, das es zum einen sehr unübersichtlich wird und zum anderen was ist wenn man eine weitere Rolle hinzufügt diese jedoch noch nicht irgendwo eingeplant ist.

    Weiß jemand von Euch wie das üblicherweise gehandhabt wird? Also gibt es eine Art oder sogar ein Design Pattern das ein solches Problem löst?

    Meine Idee war man gibt den Rollen int Werte z. B. Admin = 100, Fußball = 30, Football = 29, etc.
    Somit könnte man sagen alles was kleiner ist als 30 darf den Button sehen. Kommt nun eine neue Ballsportart hinzu bekommt diese den Wert 28 und wäre somit mit drin. Das ganze ist jedoch auch sehr aufwändig, fehleranfällig und unsauber :-(

    Ich weiß derzeit nicht weiter hat jemand eine Idee? Gehört dieses Thema eigentlich hier her?

    Du könntest Deine Variable in der [FONT=Courier New]after_setup_theme[/FONT] Action oder ggf. auch etwas später in der [FONT=Courier New]template_redirect[/FONT] Action bestücken, dann wäre sie vermutlich überall für Deine Zwecke verfügbar.

    Danke das schaue ich mir mal an :-)

    Tipp am Rande: Bei sowas aber immer auch an die Nutzung bzw. Nichtnutzung von Caching denken...


    Ans Chaching habe ich auch gar nicht mehr gedacht, mal schauen ob ich es irgendwie hin bekomme :)

    Wenn nicht melde ich mir hier nochmal ;-)
    Danke für eure Hilfe

    Moderner wäre eine helper- oder eine trait-Klasse, wenn Du mit PHP-Klassen arbeitest.

    Wenn das in einer Klasse realisiert wäre, wäre es dann nicht wieder der selbe Aufwand?
    Ich erstelle eine Klasse, diese müsste ich dann in sämtlichen PHP Dateien in denen die Funktion aufgerufen wird instanzieren damit hätte man doch nichts gewonnen oder?

    Mit PHP habe ich nicht so viele Erfahrungen ansonsten Arbeite ich mich Java, C und C++. Dort verwende ich keine Globalen Variablen. In dem Fall oben würde man ein Objekt erstellen und dessen Referenz weitergeben um weiterzuarbeiten doch wie geht das in PHP und Wordpress?

    Guten Tag,

    meine Frage lautet:

    Ist es möglich gewisse Funktionen, die immer mal wieder in verschiedenen PHP Dateien aufgerufen werden, in eine PHP Datei auszulagern die von Wordpress vorab aufgerufen werden?

    In unserem Projekt ist es bspw. so das wir sehr oft abfragen ob ein Benutzer eine gewisse Rolle hat z. B. Administrator. Somit steht in unseren php Dateien ganz oft

    Code
    user_has_role(get_current_user_id(), 'Administrator')

    Nun dachte ich es wäre doch besser diesen Rückgabewert in einer Variable zu speichern um nicht immer wieder einen Funktionsaufruf (der Zeit und Ressourcen kostet) zu erzeugen.

    Dann würde irgendwo so etwas stehen wie z. B.

    Code
    $benuzter_rolle_admin = user_has_role(get_current_user_id(), 'Administrator');

    Diese Variable wäre nur dann sinnvoll einsetzbar, wenn man auf diese in allen PHP Dateien zugreifen könnte. Ist so etwas möglich?

    Die Einstellungen zu [FONT=Courier New]isRemoteEnabled[/FONT] werden nicht benötigt, da keine http URL (mehr) verwendet wird.

    Vielen Dank.

    Eine weitere Frage hätte ich noch. Wie bekommt man die Wordpress Seite abgesichert? An sich ist der Ordner uploads im wp-content nicht erreichbar. Es ging hier nur um die spezifischen Aufrufe also wp-content/uploads/theme/...passbild.png das konnte man einfach so aufrufen. Doch das soll man natürlich nicht können ;-) Im Internet gibt es jede menge Links und Artikel dazu doch wie gut sind diese? Kann jemand einen Link empfehlen?

    Danke, das hat funktioniert. Wir haben das hier nicht benutzt:

    Code
    $dompdf = new Dompdf( [ 'chroot' => ABSPATH ] );

    Jetzt hätte ich noch eine Frage, wir nutzen eigentlich für den Konstruktor Aufruf ein Option Objekt das wie folgt aussieht:

    PHP
    $options = new Options();
        $options->set('defaultFont', 'Helvetica');
        $options->setIsRemoteEnabled(true);
        $options->set('isRemoteEnabled', true);
    
    
    $dompdf = new Dompdf($options);

    Habe nicht gefunden ob man beides dem Konstruktor übergeben kann, ebenso wenig habe ich gefunden ob man chroot in Options() setzen kann :-(

    Super schon mal das es nun so geht :-)

    mhhh... hab jetzt einiges Ausprobiert und werde nicht ganz schlau aus allem.
    Also mein domPDF ist in einem Plugin und meine Passbilder speichere ich (erst jetzt gesehen) im Theme Ordner :D

    Kann es sein das ein Plugin berechtigung benötigt um auf einen Ordner im Theme zugreifen zu dürfen? Denn wenn ich auf einer Seite den relativen Link zu einem Passbild angebe /wp-content/uploads/myTheme/passbild01.png dann erscheint schön mein Bild.

    Also ich verstehe das mit dem lokalen Serverpfad nicht. Wenn ich ein <img> Element erstelle mit dem lokalen Serverpfad wird das Bild nicht angezeigt. Nutze ich dann wieder den http://link wird das Bild richtig angezeigt.

    Der lokale Pfad wird mir durch die PHP Funktion angezeigt

    PHP
    echo dirname(__FILE__);

    Wo ist mein Fehler? Weiß das jemand

    /mnt/.../app/wp-content/uploads/bilder/2022_10_15_14_05_47_asdasd_sdasdasdadsa_Passbild.png

    Diesen meinst du sicherlich als lokalen Serverpfad. Das hatten wir versucht doch es ging nicht :-(
    Hab auch etwas gesucht im Internet und finde keine Funktion / Methode in der man DomPDF umstellen könnte oder der gleichen =(