Implementieren einfacher dynamischer Routen in WordPress

Lesezeit: 4 Minuten

Benutzeravatar von gillesv
Gillesv

Angenommen, ich habe eine saubere WordPress-Installation mit einem einfachen benutzerdefinierten Design.

In diesem Thema habe ich eine benutzerdefinierte Seitenvorlage, die nur ein Iframe ist, der auf eine Webapp in einer anderen Domain verweist.

Angenommen, meine WordPress-Installation ist unter erreichbar http://beispiel.comund meine Seite mit der Iframe-Vorlage befindet sich unter http://example.com/members/.

Ich möchte nun dynamische Routen hinzufügen, damit alle Anfragen an http://example.com/members/loginoder http://example.com/members/event/1 (zum Beispiel) alle gehen zu http://example.com/members/ aber übergeben Sie den zweiten Teil der Route (‘/login’ oder ‘/event/1’) an den Iframe im Inneren.

Was wäre der beste Weg, dies zu erreichen, ohne sich in die Interna von WordPress hacken zu müssen?

Ich habe dieses Plugin gefunden: https://wordpress.org/plugins/wp-on-routes/ aber zu meiner Bestürzung stellte ich fest, dass es, als ich versuchte, es zu verwenden, das eingebaute Routing von WordPress vollständig überschrieb, was bedeutete, dass ich jede einzelne URL manuell neu hinzufügen müsste (so wie ich es verstehe, bin ich nicht so versiert in PHP ), was ein No-Go ist, da mein Client immer noch in der Lage sein muss, zu posten, ohne PHP-Dateien manuell zu bearbeiten.

Vielen Dank fürs Lesen.

Benutzeravatar von Fencer04
Fechter04

Sie können Routing mit hinzufügen add_rewrite_rule so haken:

function custom_rewrite_rule() {
  add_rewrite_rule('members/([^/]+)/([^/]+)/?$',
    'index.php?memberspage=$matches[1]&event_id=$matches[2]',
    'top');
}

add_action('init', 'custom_rewrite_rule', 10, 0);

Abhängig von den URLs, die Sie umschreiben, müssen Sie möglicherweise mehrere erstellen. Sie können dann die URL-Parameter in Ihrem Template verwenden, um die entsprechende Seite in Ihrem Iframe zu laden.

  • Das hat nicht funktioniert, aber du hast mich in die richtige Richtung gelenkt. Ich werde meine ursprüngliche Frage mit der gefundenen Lösung aktualisieren. Vielen Dank.

    – gillesv

    18. August 2016 um 9:32 Uhr

  • Ich bin mir ziemlich sicher, dass Sie meine Antwort verwendet haben. Ich hätte niemals Ihre genaue Antwort erstellen können, da ich nicht alle URLs hatte, die Sie erstellen wollten. Ich denke, ich sollte zumindest eine Stimme für meine Antwort bekommen.

    – Fechter04

    18. August 2016 um 21:12 Uhr

  • Es gibt einige ziemlich signifikante Unterschiede in meiner endgültigen Antwort, und Ihr Code hat bei mir einfach nicht funktioniert, als ich ihn in dem von mir angegebenen Kontext ausprobiert habe. Wenn jemand wie ich auf der Suche nach einer Lösung auf diese Seite gekommen wäre, hätte Ihre kurze Antwort allein nicht ausgereicht. Und ich habe dir Anerkennung dafür gezollt, dass du mich in die richtige Richtung gelenkt hast. Aber haben Sie trotzdem einen Punkt, wen interessiert das?

    – gillesv

    20. August 2016 um 8:23 Uhr

Dank des Vorschlags von Fencer04 konnte ich eine Lösung für mein Problem finden. Ich habe diese Seite gefunden: https://developer.wordpress.org/reference/functions/add_rewrite_rule/ wo ich ein Beispiel gefunden habe, das nahe genug an meinem Problem war, um zu arbeiten.

Also in der functions.php:

function custom_rewrite_rule(){
    $page_id = 318; // replace this ID with the page with the iFrame template 

    $page_data = get_post($page_id);

    if(!is_object($page_data)){
        return; // all other pages don't have to support custom deeplinks
    }

    // catches deeplinks 1 level deep, i.e.: /members/profile
    add_rewrite_rule(
        $page_data->post_name . '/([^/]+)/?$',
        'index.php?pagename=" . $page_data->post_name . "&memberspage=$matches[1]',
        'top'
    );

    // catches deeplinks 2 levels deep, i.e.: /members/profile/edit
    add_rewrite_rule(
        $page_data->post_name . '/([^/]+)/([^/]+)/?$',
        'index.php?pagename=" . $page_data->post_name . "&memberspage=$matches[1]&members_param=$matches[2]',
        'top'
    );

    // catches 3 levels deep, i.e. /members/profile/edit/confirm
    add_rewrite_rule(
        $page_data->post_name . '/([^/]+)/([^/]+)/([^/]+)/?$',
        'index.php?pagename=" . $page_data->post_name . "&memberspage=$matches[1]&members_param=$matches[2]&members_param2=$matches[3]',
        'top'
    );

}

add_action('init', custom_rewrite_rule);

Als nächstes habe ich Filter für die neuen query_vars hinzugefügt:

add_filter('query_vars', function($vars) {
    $vars[] = "memberspage";
    $vars[] = "members_param";
    $vars[] = "members_param2";
    return $vars;
});

Und dann kann ich in meiner template-iframe.php wie folgt auf diese Parameter zugreifen:

<?php 

    // get query strings 
    global $wp_query;

    $page = $wp_query->query_vars['memberspage'];
    $params = $wp_query->query_vars['members_param'];
    $params2 = $wp_query->query_vars['members_param2'];

    $membersBaseURL = 'http://members.domain.com/';
    $iframeURL = $membersBaseURL;

    if(isset($page)){
        $iframeURL = $iframeURL . $page . "https://stackoverflow.com/";
    }

    if(isset($params)){
        $iframeURL = $iframeURL . $params . "https://stackoverflow.com/";
    }

    if(isset($params2)){
        $iframeURL = $iframeURL . $params2 . "https://stackoverflow.com/";
    }
?>

<iframe id="iframeLeden" src="https://stackoverflow.com/questions/38981506/<?php echo($iframeURL) ?>" frameborder="0"></iframe>

Also wenn ich jetzt gehe http://www.domain.com/members/logines zeigt mir die richtige statische WP-Seite mit einem Iframe, der die Seite anzeigt http://members.domain.com/login/ .

1427150cookie-checkImplementieren einfacher dynamischer Routen in WordPress

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy