Variable von Seitenlink an Template übergeben?

  • Ich möchte mit einem einzigen Template viele Artikel mit ihrer ID aus einer externen Datenbank in WordPress holen. Mit einer festen ID im Template funktioniert das.

    Ich habe eine Seite in WP mit allen Links zu den Artikeln.
    Und ich habe für alle Artikel in WP eine Seite mit der Überschrift erstellt.

    Wenn folgendes funktionieren würde ... ?p=599&id=333 wärs ja ok.

    Gibt es einen (anderen) Weg?

    • 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

  • WP 3.8.1
    Theme Espound

    Leider hat auch die o.g. Anleitung in meinem Theme nicht funktioniert. Das geänderte functions.php hat eine Fehlermeldung verursacht. Als letzte Chance für WP habe ich die URL, die die Variablen an das Template übergibt, nochmal geändert. Und siehe da, es funktioniert.

    index.php?page_id=100&id=304

    100 ist die Seite mit dem Attribut externe_datenbank_artikel (Template)
    304 ist die ID eines Artikels in der externen Datenbank

    Es stimmt also nicht, dass WP nur eine Variable übergeben kann, so wie ich es in der letzten Woche überall gelesen habe. Vielleicht liegt das auch an functions.php in Expound.

    Einen Link zur Lösung kann ich noch nicht geben, weil das Projekt der Umzug einer klassischen Kundenseite zum responsiven WP ist. 90% der Inhalte werden aus der Datenbank der alten Homepage kommen. Das Umkopieren einer dynamischen Site in eine statische WP-Lösung wäre ja Schwachsinn.

  • Es stimmt also nicht, dass WP nur eine Variable übergeben kann, so wie ich es in der letzten Woche überall gelesen habe.


    Wer hat denn so etwas geschrieben?
    Im unteren Beispiel übergebe ich zum Beispiel zwei, wollte nur seit Wochen den Text ergänzen, weil es mit Einzelheiten zum besseren Verständnis noch haperte.

    http://www.coder-welten.com/die-wp-rewrite-api/

    Du kannst nur nicht unbegrenzt viele übergeben und die Du übergibst, müssen auch als query_vars vorhanden sein oder als neue query_vars hinzugefügt werden. Siehe erste Funktion im Beispiel, da fehlt die Beschreibung noch vollständig.

    http://www.coder-welten.com/die-wp-rewrite…nd-umschreiben/

    Ich hatte mich nur herausgehalten, weil ich nichts von der Sicherheit von Zugriffen auf externe Datenbanken weiß. Was verhindert da den Zugriff von Unbefugten, wie sind die Sicherheitsvorkehrungen?

    Bei den meisten Hostern wird ein externer Zugriff ohnehin nicht möglich sein, denke ich mir. Für einen Webservice oder so könnte ich mir aber zum Beispiel eine Schnittstelle über WSDL oder Rest vorstellen, um eine gewisse Trennung zu erreichen. Somit sollte eigentlich auch die externe Datenbank für externe Zugriffe gesperrt werden können und die Anfrage betreffend Abrufs von Daten über ein Script mit einer Schnittstelle erfolgen, welches bei dem Hoster liegt, bei dem sich der Datenbankserver befindet. Oder so in etwa zumindest.

    Einmal editiert, zuletzt von Melewo (6. April 2014 um 12:08)

  • Danke.

    Vielleicht ist *extern* eine falsche Bezeichnung von mir. Die Tabellen für die aktuelle Homepage liegt auf dem selben Server wie die neue WP-Site, also beim selben Provider.

    Von query_vars habe ich keine Ahnung.

    Ich hole mit einem Template die Headlines einer Rubrik und die IDs für eine Seite mit Linkliste.

    Index.php?page_id=100&to=boeden_innen

    Mit einem zweiten Template hole ich Artikel mit der Variable ID der Linkseite.

    Index.php?page_id=200&id=304

    ( Da die URL der Fotos in der aktuellen Homepage ohne Domain angegeben sind, nur ./img/bild.jpg,kopiere ich alle in einen Ordner /img in der Root der WP-Installation. )


    Deine Seite werde ich gleich öffnen ...

  • Die Beschreibung von der Codex-Seite ist auch nicht gerade erschöpfend.

    http://codex.wordpress.org/Plugin_API/Fil…ence/query_vars

    Damit WP zum Beispiel den Wert von s von der Suche verarbeiten kann, muss WP s kennen. Du übergibst /?Parameter=Wert&Parameter-zwei=Wert2 und WP muss den/die Parameter kennen, um mit dem Wert etwas anfangen zu können, es sei denn Du liest die mit $_GET aus.

    Code
    $_GET["Parameter"]
    $_GET["Parameter-zwei"]


    Wenn Du aber zum Beispiel die Einstellung Beitragsname verwendest, geht es nicht anders, Du musst Parameter und Parameter-zwei bei WP als query_vars hinzufügen und dann eine entsprechende Rewrite Regel schreiben, um richtig darauf zugreifen zu können. Und nur so ist dann eine Übergabe möglich wie bei:

    "http://www.example.com/rubrik/354/968/"

    Die Seite ist besser und enthält auch vorhandene und Beispiele und wenn die vorhandenen nicht genügen, fügst Du eigene hinzu:

    http://codex.wordpress.org/WordPress_Query_Vars

    Hier noch etwas zur Verarbeitung:

    http://codex.wordpress.org/Function_Reference/get_query_var

    Nun sollte ich wohl meine eigene Beschreibungen fertigstellen, damit jemand damit anzufangen weiß.

    Einmal editiert, zuletzt von Melewo (6. April 2014 um 14:32)

  • Danke nochmal.

    Bei mir funktioniert es, ohne dass ich was anderes mache als Links mit den zusätzlichen Variablen id oder to abzuschicken. In den Templates werden sie natürlich mit $id=$_GET['id'] und $to=$_GET['to'] in Empfang genommen ;)

  • Na ja, klar geht das auch, macht man ja bei einem anderen PHP-Script nicht anders. Nur wenn man bei einem anderen Script keinen QueryString anhängen möchte, definiert man die Rewrite-Regeln in einer htaccess. WP verwaltet aber Rewrite-Regeln selbst, deshalb muss man diese zu WP hinzufügen.

    Wobei es nicht nur um ein sauberes Aussehen der URL geht, sondern auch gleich ein kleinwenig mit um die Sicherheit. Bei $_GET würde ich als Filter eine Zeichenklasse verwenden, bei Ziffern als Wert eben [^0-9], bei WP-Rewrite-Regeln oder bei sonstigen PHP-Scripts mit htaccess-Rewrite-Regeln würde ich es nicht anders machen, doch zusätzlich bereits einen versuchten Seitenaufruf

    mit "http://www.example.com/rubrik/abc/968/"
    statt "http://www.example.com/rubrik/354/968/"

    mit Forbidden oder einer Weiterleitung auf eine Fehlerseite vereiteln. Sonst könnte da jemand zu viel experimentieren, was alles als Wert übergeben werden kann. Und versuche gibt es immer wieder, mal ein Beispiel aus meinen Statistiken:

    Zitat

    ? 2D 64+ 61 6C 6C 6F 77 5F 75 ...

    Gehe davon aus, dass die Lücken mit Prozentzeichen aufgefüllt waren, welche der Filter aussiebte. Mit einer vernünftigen Rewrite-Regel würden die halt bereits vor einem Filter entschärft. Und ich habe schon genügend gesehen, die jeglichen Filter für $_GET vergessen hatten.

  • Bleibe mal hier im Forum, lässt sich hier besser darstellen als in einer PN und wenn ich jetzt poste, weiß keiner warum. Es gibt unterschiedliche Möglichkeiten, einige verwenden gern die Funktion strip_tags. Ich schreibe es lieber so, wobei es dann je nach Aufgabe angepasst werden muss. Bei Deinem Vorhaben könnte es etwa so aussehen und alles Wesentliche geht denke ich aus den Kommentaren hervor.


    Ließe sich noch alles in eine Funktion packen, doch das braucht nicht unbedingt zu sein bei einfachen Listings.

    Einmal editiert, zuletzt von Melewo (6. April 2014 um 19:55)

  • Hier braucht Dir nichts peinlich zu sein. In WP einzusteigen, wenn man etwas mehr möchte, als nur ein fertiges Theme unverändert zu benutzen, ist nicht einfach. Immer wenn ich denke, ich wüsste schon recht viel, kommt ein Tiefflug mit unsanfter Landung.

    Und das andere, so lange es Beispiele wie dieses (war jetzt nur das erste welches ich fand)

    PHP
    Welcome <?php echo $_POST["name"]; ?><br>
    Your email address is: <?php echo $_POST["email"]; ?>


    http://www.w3schools.com/php/php_forms.asp

    gibt, wo die Ausgabe nicht einmal mit echo htmlspecialchars($_POST["name"]) zumindest etwas abgesichert wird, wundert mich eh nichts. Denen sollte so etwas peinlich sein, nicht Dir. Wobei denen braucht das auch nicht unbedingt peinlich sein, weil Beispiele eigentlich nur das Prinzip verdeutlichen sollen, nur von vielen dann als Codeschnipsel übernommen werden.

    Einmal editiert, zuletzt von Melewo (7. April 2014 um 16:17)

  • Muss mich korrigieren, hatte nur den Text nicht beachtet, die Seite enthält ja eine Sicherheitswarnung und zwei Seiten weiter kommt dann auch ein Beispiel, wie die Ausgabe abgesichert werden kann.

    Jetzt müsste mir das eigentlich peinlich sein, nicht gleich soweit gelesen zu haben:

    PHP
    function test_input($data)
    {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
    }


    http://www.w3schools.com/php/php_form_validation.asp

    Und noch ein oder zwei Seiten weiter dann Beispiele, wie bereits der Eingang abzusichern und zu filtern ist:

    PHP
    $name = test_input($_POST["name"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$name))
      {
      $nameErr = "Only letters and white space allowed";
      }


    http://www.w3schools.com/php/php_form_url_email.asp

    Also doch richtig gut die Seite für einen ersten Überblick, falls nicht alle nur soweit die Seite betrachten, wie ich beim ersten Aufruf.

    Einmal editiert, zuletzt von Melewo (7. April 2014 um 17:19)

  • Jetzt komme ich der Problemlösung näher. Bin dabei, es successive einzubauen.

    Die nächste Baustelle heißt expound-child ;) - im Prinzip funktioniert es, doch Header und Menü versagen. Aber das in einem neuen Thread.

Jetzt mitmachen!

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