it-swarm.com.de

Wie erstelle ich benutzerdefinierte URL-Routen?

Ich habe eine sehr eigenartige Anforderung, hoffentlich kann ich sie erklären, ohne zu verwirrend zu sein. Ich habe eine Seitenvorlage erstellt, in der einige Eigenschaften aufgelistet sind, die ich aus einer externen XML-Datei erhalte. Bisher keine Probleme. Nehmen wir an, die URL sieht folgendermaßen aus:

http://www.example.com/properties/

Jede Eigenschaft verfügt über einen Link, der den Benutzer zu einer Seite "Einzelne Eigenschaft" weiterleiten soll, auf der weitere Informationen dazu angezeigt werden. Ich habe mich gefragt, ob es eine Möglichkeit gibt, den Link so zu gestalten:

http://www.example.com/properties/123

Wobei 123 die ID der Eigenschaft wäre. Wenn ich also eine URL wie properties/some_id habe, möchte ich in der Lage sein, eine Ansichtsdatei (wie die Dateien single.php oder page.php) zu laden, die für diese URL-Bedingung spezifisch ist.

Ist das möglich?

46

Füge dies in die functions.php deines Themas ein, oder setze es in ein Plugin .

add_action( 'init', 'wpse26388_rewrites_init' );
function wpse26388_rewrites_init(){
    add_rewrite_rule(
        'properties/([0-9]+)/?$',
        'index.php?pagename=properties&property_id=$matches[1]',
        'top' );
}

add_filter( 'query_vars', 'wpse26388_query_vars' );
function wpse26388_query_vars( $query_vars ){
    $query_vars[] = 'property_id';
    return $query_vars;
}

Dies fügt eine Umschreiberegel hinzu, die Anforderungen an /properties/ mit einer beliebigen Kombination von Zahlen nach Seitenname properties weiterleitet, wobei die Abfrage var property_id festgelegt ist. Besuchen Sie auf jeden Fall die Seite mit den Einstellungen für Permalinks und speichern Sie, um die Überschreibungsregeln zu löschen, damit diese neue Regel enthalten ist.

In Ihrer page-properties.php-Vorlage gibt get_query_var('property_id') die Eigenschafts-ID zurück, wenn diese festgelegt wurde. Wenn dies nicht der Fall ist, wird die Standardeigenschaftsseite angezeigt.

54
Milo

Ein anderer Weg, es zu tun:

add_action('init', function() {
    add_rewrite_rule( '^properties/([0-9]+)/?',
                      'index.php?pagename=properties&property_id=$matches[1]',
                      'top' );
}, 10, 0);

add_action('init', function() {
    add_rewrite_tag( '%property_id%', '([^&]+)' );
}, 10, 0);

Codex Rewrite API/Schreibregel hinzufügen

Codex Rewrite API/Schreibtag hinzufügen

9