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

[DEV] ModRewrite und Spezifische Seiten

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von Eideard, 25. September 2019.

  1. Eideard

    Eideard New Member

    Registriert seit:
    25. September 2019
    Beiträge:
    2
    Zustimmungen:
    0
    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
    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?
    Spezifische Seiten
    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.
    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.
     
  2. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.678
    Zustimmungen:
    1.786
    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.
     
  3. Eideard

    Eideard New Member

    Registriert seit:
    25. September 2019
    Beiträge:
    2
    Zustimmungen:
    0
    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:

    add_filter( 'the_content', 'my_filter' );
    function my_filter($content) {

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

    return $content;

    }



    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.
     
  4. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.678
    Zustimmungen:
    1.786
    Man könnte auch page.php oder falls nicht vorhanden ggf. ein entspr. Fallback-Template als page-mypagetitle.php ins Themeverzeichnis kopieren und darin statt the_content() 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.
     
    #4 b3317133, 25. September 2019
    Zuletzt bearbeitet: 25. September 2019
  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