[DEV] ModRewrite und Spezifische Seiten

  • Hallo,
    ich hoffe in diesem Forum vielleicht auch ein paar Entwickler anzutreffen. Ich Entwickel momentan ein Plugin für mein Wordpress. Es läuft soweit ganz gut, aber bei 2 Dingen hackt es etwas und da erhoffe ich mir ein wenig Hilfe.

    Mod Rewrite
    [INDENT]Bei Wordpress werden die URLs ja immer sehr schick dargestellt:
    http://example.de/artikelliste
    oder
    http://example.de/artikel/Batterie

    Ich möchte mit meinem Plugin nun eine Liste von Gegenständen anzeigen lassen (funktioniert) und wenn diese ausgewählt werden, komme ich auf eine Detailansicht. Momentan sieht das URL technisch nun so aus:
    http://example.de/artikelliste
    http://example.de/artikel/?id=4
    Das finde ich doof und ich würde gerne die ID direkt in der URL haben wie oben schon gezeigt. Entsprechende Teile der Datenbank usw. sind vorbereitet und jeder Artikel hat auch einen unique Namen dafür. Aber wie überrede ich WP nun dazu?
    [/INDENT]
    Spezifische Seiten
    [INDENT]Aktuell ist die Anzeige der Artikelliste so gelöst, dass ich eine Seite erstelle in der ein BBCode reinkommt (z.B. [myplugin_artikelliste]) dann wird dort die Artikelliste angezeigt. Dies hat aber auch einige Nachteile und ich würde gerne bestimmte Seiten in WP auf mein Plugin Münzen. Dies geht ja z.B. mit der Datenschutzseite, mit der Blogseite usw. Shop Plugins haben sowas auch also müsste das ja auch bei mir möglich sein. Wie kann ich das realisieren, dass wenn eine Seite geladen wird, mein Plugin bzw. ein bestimmter Teil sofort ausgeführt wird.
    [/INDENT]
    Ich erwarte hier keinen Quellcode oder sowas, ein paar gute Suchbegriffe würden mir vielleicht auch schon helfen. Denn ich weiß leider nicht wonach ich noch suchen soll bzw. wie die entsprechenden Schlagworte für diese Funktionen sind.

    Ich danke vielmals. Sollte ich hier absolut fehl am platz sein, habt ihr ja vielleicht Ideen wo ich mein Anliegen auch vortragen kann.

    • 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

  • Der normale WordPress Ansatz wäre das Erstellen eines sog. Custom Post Types für Deine Artikel und das (ggf. periodisch automatisierte) Einpflegen Deiner Daten. Dann erscheinen die Artikel wie Beiträge oder Seiten im WordPress Backend, alle Links wären automatisch "schön" und man könnte entspr. Theme-Dateien als Templates verwenden, mehr dazu hier. Das klingt erstmal etwas kompliziert, ist aber im Grunde der empfehlenswerte Weg.

    Eine Alternative wäre das Anlegen eigener Rewrite-Rules, hier ein (alter) Blogbeitrag der das grundsätzlich erklärt. Für das manuelle Anlegen von Regeln gibt es (seit Erscheinen des Beitrags) auch eine WordPress Rewrite API, mehr dazu via Suchmaschinen Deiner Wahl.

  • Hi, das mit dem Custom Post Types habe ich mir angesehen, ist eine nette Idee.
    Ich habe es glaub ich noch nicht so ganz verstanden wie das ganze funktioniert. Ich habe mir zwar einen custom type registriert nur so ganz erreiche ich die jeweilige Seite nicht.
    Ich habe allerdings eine ganz eigene "Datenbank" (nur eigene Tabellen, ich nutze bis auf die wp_options keine tabellen) und auch die entsprechende GUI weil es sehr viele zusammenhängende Daten gibt, und ich dazu gerne auch Fremdschlüssel nutzen möchte was die WP Datenbank so jetzt nicht liefert. Ich versuch mich da mal weiter reinzulesen.

    Aber wie er zufall es so will. Für den zweiten Punkt habe ich jetzt eine Lösung gefunden. Ist doch immer so, man sucht 2 Tage, entschließt sich dann, andere damit zu nerven und kommt dann selber auf die Lösung.
    Aber für alle die selber mal so ein Problem haben:

    [FONT=Courier New]add_filter( 'the_content', 'my_filter' );
    function my_filter($content) {

    switch($GLOBALS['post']->post_name){
    case 'mypagetitle':
    return MyClass::MyFunction();
    }

    return $content;

    }[/FONT]


    mit add_filter('the_content') legt man fest, dass beim erstellen des Inhalts einer Seite ein Filter angewendet soll welcher sich in der Funktion my_filter() befindet. Als Parameter erhält man den Content der Seite welchen man bearbeiten kann.
    Diese Funktion wird nun jedesmal aufgerufen. Im switch-case frage ich den Seitentitel ab ($GLOBALS['post']->post_name) und schaue ob es sich um meine gewünschte Seite handelt. Nun rufe ich meine Funktion auf, welche meinen gewünschten Content erstellt und gebe dies zurück. Handelt es sich nicht um eine meiner gewünschten Seiten, so wird einfach der reine Content unbearbeitet zurückgegeben.
    Einfach aber es funktioniert. Mir fehlt noch, dass ich die Seite unter "Seiten" im WP irgendwie kenntlich machen kann wie es bei der "— Beitragsseite" oder "— Startseite" immer dahinter steht. Aber da das Plugin nur für mich selber ist, kann ich das vernachlässigen.

  • Man könnte auch [FONT=Courier New]page.php[/FONT] oder falls nicht vorhanden ggf. ein entspr. Fallback-Template als [FONT=Courier New]page-mypagetitle.php[/FONT] ins Themeverzeichnis kopieren und darin statt [FONT=Courier New]the_content()[/FONT] dann die eigene Funktion ausführen, mehr dazu hier. Dann braucht man keinen extra Filter.

    Zum kenntlich machen kann man den sog. "Post State" verwenden, hier ein Beispiel.

    Wie das ganze das "schöne URLs" Problem löst, verstehe ich allerdings noch nicht ganz, aber egal.

    3 Mal editiert, zuletzt von b3317133 (25. September 2019 um 14:49)

Jetzt mitmachen!

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