Wie erstelle ich benutzerdefinierte URL-Routen?
2 Antworten
- Stimmen
-
- 2011-08-19
Fügen Sie dies zur Dateifunctions.php Ihres Themas hinzu,oderfügen Siees in ein Plugin ein.
add_action ('init','wpse26388_rewrites_init'); Funktion wpse26388_rewrites_init () { add_rewrite_rule ( 'Eigenschaften/([0-9] +)/? $', 'index.php?pagename=properties & amp;property_id=$entspricht [1]', 'oben' ); }} add_filter ('query_vars','wpse26388_query_vars'); Funktion wpse26388_query_vars ($ query_vars) { $ query_vars []='property_id'; return $ query_vars; }}
Hiermit wirdeine Umschreiberegel hinzugefügt,die Anforderungen an
/properties/
mit einerbeliebigen Kombination von Zahlennach den Seitennamenproperties
mit der Abfrage varproperty_id
einstellen. Besuchen Sieeinfach die Seitemit den Permalink-Einstellungen und speichern Sie sie,um die Umschreiberegeln zu löschen,damit dieseneue Regelenthaltenist.In Ihrer Vorlage
page-properties.php
gibtget_query_var ('property_id')
die Eigenschafts-ID zurück,wenn siefestgelegt wurde,wenn sie dannnicht die Standardeigenschaften anzeigt Seite.Add this to your theme's functions.php, or put it in a 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; }
This adds a rewrite rule which directs requests to
/properties/
with any combination of numbers following to pagenameproperties
, with the query varproperty_id
set. Just be sure to visit your permalinks settings page and save to flush rewrite rules, so this new rule will be included.In your
page-properties.php
template,get_query_var('property_id')
will return the property id if it was set, if it's not then show the default properties page.-
Dies war kurz davor,fürmich zu arbeiten,aberichmusste hinzufügen: add_filter ('init','flushRules'); FunktionflushRules () { global $ wp_rewrite; $ wp_rewrite->flush_rules (); }}This was CLOSE to working for me but I needed to add: add_filter('init','flushRules'); function flushRules(){ global $wp_rewrite; $wp_rewrite->flush_rules(); }
- 5
- 2012-11-13
- tooshel
-
@tooshel Siemöchten definitivnichtbei jeder Anforderung Regeln löschen,diesisteine teure Operation und verlangsamt Ihre Website aufein Crawling.Siemüssen die Regelnnureinmal löschen,bei der Aktivierung des Plugins odereinfach auf der Seitemit den Permalink-Einstellungen.@tooshel you definitely don't want to flush rules on every request, it is an expensive operation and will slow your site to a crawl. you only need to flush rules once, on plugin activation, or just by visiting the permalinks settings page.
- 23
- 2012-11-13
- Milo
-
Ja,das versteheich...aber wenn dutestestistes schön,dasses da drinist!Yeah, I get that . . . but when you are testing it's nice that it's in there!
- 1
- 2012-11-14
- tooshel
-
Einintelligenterer Umschreib-URL-Regex könnte `` `^properties/([0-9] +)/?` `` Sein.Andernfalls würdees soetwas wie `` `example/properties/1```entsprechenA smarter rewrite url regexp might be ```^properties/([0-9]+)/?```. Otherwise it would match something like ```example/properties/1```
- 3
- 2014-12-12
- Ryan Taylor
-
@ RyanTaylorbist du dir da sicher?Beim Testen wird "example/properties/1"nichterfasst.@RyanTaylor are you sure about that? it doesn't capture `example/properties/1` when I test it.
- 0
- 2014-12-12
- Milo
-
Wobefindet sich die Dateipage-properties.php?Ich habeesin das Plugin-Verzeichnisgestellt.Ist das richtig?What is location of page-properties.php file? I put it inside plugin directory. Is that right?
- 0
- 2016-06-30
- Farid Movsumov
-
@ FeridMovsumov-Themendateien werdenimmer aus dem aktuellen aktiven Themenverzeichnisgeladen,es sei denn,Sie [fügeneinen Filter hinzu] (https://developer.wordpress.org/themes/basics/template-hierarchy/#filter-hierarchy),um sie voneiner anderen Stelle zu laden.@FeridMovsumov theme files are always loaded from the current active theme directory, unless you [add a filter](https://developer.wordpress.org/themes/basics/template-hierarchy/#filter-hierarchy) to load them from elsewhere.
- 0
- 2016-06-30
- Milo
-
Hallo @Milo,dasistein wunderschöner Code.Wissen Sie,wie Sie dies verhindern können,wenn Sie $paged=(get_query_var ('paged')) verwenden?get_query_var ('paged'): 1;?Die Funktionerfasst $page (und lässtes leer) undich kannnicht weiterpaginieren.Hello @Milo, this is a beautiful piece of code. Do you know how to make this not clash when using $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ? The function is capturing $page (and leaving it blank) and I'm not able to continue paginating.
- 0
- 2017-08-08
- Jaypee
-
- 2017-05-21
Eine andere Möglichkeit:
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);
Another way to do it:
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);
-
Die akzeptierte Antwortfunktioniertmit 4.7 (und 4.8),nicht sicher,warum Sie denken,dass diesnicht der Fallist.Ihr Codemachtim Wesentlichen dasselbe. `Add_rewrite_tag`fügt die Abfragevariable demselben Array hinzu wie der Filter` query_vars`.The accepted answer works with 4.7 (and 4.8), not sure why you think it doesn't. Your code is essentially doing the same thing, `add_rewrite_tag` adds the query var to the same array as the `query_vars` filter.
- 2
- 2017-07-07
- Milo
-
@Milo hatesbei mir wahrscheinlichnichtfunktioniert,aberich habe kein 4.7mehr zur Hand,sodassichesnicht überprüfen kann.Ich werdemeine Antwortbearbeiten.@Milo it probably didn’t work for me, but I don’t have a 4.7 handy anymore so I can’t check. I will edit my answer.
- 0
- 2017-07-08
- Christian Lescuyer
-
@Milo Ichpersönlichbevorzuge zwar das Umschreiben von Tags,habe abertrotzdem die akzeptierte Antwortgetestet undesfunktioniert.Nurein paarpersönliche Vorlieben.@Milo Although I personally prefer rewrite tag, but still tested the accepted answer and it works. Just some personal tastes, though.
- 0
- 2017-07-08
- Jack Johansson
-
@ JackJohansson-Tags zum Umschreiben sinderforderlich,wenn Sie sie [ineiner Permastruktur] verwenden (https://codex.wordpress.org/Function_Reference/add_permastruct).Esistnurein zusätzliches Datenelement,das WordPressin diesem Fallniemals verwendet.@JackJohansson rewrite tags are necessary when you're using it [in a permastruct](https://codex.wordpress.org/Function_Reference/add_permastruct). It's just an extra bit of data that WordPress never uses in this case.
- 1
- 2017-07-08
- Milo
-
Beide Regeln können derselben Methode hinzugefügt werden,was zueiner saubereren undnützlicheren Funktionführt,zu der Sie zurückkehren und herausfinden können,ob Wartungsarbeiten durchgeführt werdenboth rules can be added to the same method, ending up in a cleaner and more useful function to come back to and figure out if doing maintenance work
- 0
- 2018-07-14
- eballeste
Ich habeeine ganzbesondere Anforderung,hoffentlich kannich sieerklären,ohne zu verwirrend zu sein.Ich habeeine Seitenvorlageerstellt,in dericheinige Eigenschaften aufführe,dieich auseinerexternen XML-Dateierhalte. Bisher keine Probleme. Nehmen wir an,die URL lautet wiefolgt:
Jede Eigenschaft verfügt übereinen Link,der den Benutzer zueiner Seite "Einzelne Eigenschaft" weiterleiten soll,auf der weitere Informationen dazu angezeigt werden.Ich habemichgefragt,obeseine Möglichkeitgibt,den Link wiefolgt zuerstellen:
Wobei
123
die ID der Eigenschaft wäre.Wennich alsoeine URL wieproperties/some_id
habe,möchteicheine Ansichtsdatei laden können (wie diesingle.php
oderpage.php
Dateien),jedoch spezifischfür diese URL-Bedingung.Ist dasmöglich?