Rewrite-Regel für benutzerdefinierten Beitragstyp für Autor und Paging?
-
-
* @banesto * - Ichbrauchemehr Kontext,um Ihre Fragenbeantworten zu können.Welche Hakenbenutzt du?Verwenden Sie die Funktion `add_rewrite_rule ()`?Wenn Sieein vollständiges Beispiel veröffentlichen können,isteseinfacher,Ihnen zu helfen.*@banesto* - I need more context to be able to answer your questions. What hooks are you using? Are you using the function `add_rewrite_rule()`? If you can post a complete example it will be easier to help you.
- 0
- 2010-10-23
- MikeSchinkel
-
@ MikeSchinkel - Ich habe dieganze Funktionmit einem Filter hinzugefügt.Esgibt andere Beispiele,bei denenichpost_type als Variablebeim Umschreibenerhaltenmöchte,aberes wirdignoriert,aberichglaube,es hat dengleichen Grund.@MikeSchinkel - I added whole function with a filter. there are other examples when I would like to get post_type as a variable in rewrites but it gets ignored but i believe its because of the same reason.
- 0
- 2010-10-23
- banesto
-
* @banesto * - Können Sie auch zeigen,welche URL-Strukturen Sieerreichenmöchten,damit wirnicht ratenmüssen undmöglicherweisefalsch ratenmüssen?Nennen Siebitte einige Beispiele.*@banesto* - Can you also show what URLs structures you are trying to achieve so we don't have to guess and potentially guess wrong? Give some examples please.
- 0
- 2010-10-23
- MikeSchinkel
-
@ MikeSchinkel - Ich habe Live-Beispiele und Erklärungen hinzugefügt@MikeSchinkel - I added live examples and explanation
- 0
- 2010-10-23
- banesto
-
1 Antworten
- Stimmen
-
- 2010-10-23
Hallo @banesto :
Ich denke,dieeinfache Antwort könnte sein,dass Sie Ihre ausgelagerte URL vor Ihrer kürzeren URL angebenmüssen,aber daich sienichtgetestet habe,bin ichmirnicht 100% sicher.
Trotzdem habeichimmergroße Problememit dem
'generate_rewrite_rules'
-Hook. Ichbin mir sicher,dassein besserer Entwickler alsiches zum Laufenbringen könnte,aberfürmich wares viel sauberer,die Funktionadd_rewrite_rule()
zu verwenden. So zeigeich,dass Sie Ihre URLs routenmüssen.Hieristein Plugin,mit dem Sie dastun können,wonach Siegefragt haben (der Aufruf
register_post_type()
dientnur dazu,dass dieses Pluginin meiner Testinstallation von WordPressfunktioniert. Sie könnenes durch Ihr Pluginersetzeneigene):<?php /* Plugin Name: Dienasgramatas Urls Version: 1.0 Author: Mike Schinkel Author URI: http://mikeschinkel.com/ */ if (!class_exists('Dienasgramatas_Urls')) { class Dienasgramatas_Urls { static function init() { $post_type = 'dienasgramatas' ; register_post_type($post_type, array( 'label' => 'Dienasgramatas', 'public' => true, 'show_ui' => true, 'query_var' => 'dienasgramatas', 'rewrite' => array('slug' => 'dienasgramatas'), 'hierarchical' => false, 'supports' => array('title','editor','custom-fields'), ) ); add_rewrite_rule("{$post_type}/([^/]+)/page/?([2-9][0-9]*)", "index.php?post_type={$post_type}&author_name=\$matches[1]&paged=\$matches[2]", 'top'); add_rewrite_rule("{$post_type}/([^/]+)", "index.php?post_type={$post_type}&author_name=\$matches[1]", 'top'); } static function on_load() { add_action('init',array(__CLASS__,'init')); } static function register_activation_hook() { self::init(); flush_rewrite_rules(false); } } Dienasgramatas_Urls::on_load(); }
Wenn Sie Umschreiberegeln hinzufügen,müssen Sienatürlich die Umschreiberegeln leeren,sonstfunktionieren sieeinfachnicht. Idealerweisemöchten Sie die Regelnnichtfürjedes Laden von Seiten löschen,dahererfolgt die Standardmethodeim Aktivierungs -Hookeines Plugins. Also habeichein Pluginfür Sieerstellt,aber Sie könneneinfach die Aufrufe
add_rewrite_rule()
in der Dateifunctions.php
Ihres Themas verwenden und Ihre URLsmanuell löschen,indem Sie auf klicken. Speichern Sie die Änderungen "im Abschnitt " Einstellungen> Permalinks " der Administratorkonsole.Hi @banesto:
I think the simple answer may be that you need your paged URL to be specified before your shorter URL, but since I didn't test it I'm not 100% sure.
That said, I've always run into a lot of trouble with the
'generate_rewrite_rules'
hook. I'm sure a better developer than me could make it work but for me it's been a lot cleaner to use theadd_rewrite_rule()
function so that's how I show you have to make your URLs route.Here's a plugin to do what you asked for (the
register_post_type()
call is only there to allow this plugin to work in my test install of WordPress; you can replace it with your own):<?php /* Plugin Name: Dienasgramatas Urls Version: 1.0 Author: Mike Schinkel Author URI: http://mikeschinkel.com/ */ if (!class_exists('Dienasgramatas_Urls')) { class Dienasgramatas_Urls { static function init() { $post_type = 'dienasgramatas' ; register_post_type($post_type, array( 'label' => 'Dienasgramatas', 'public' => true, 'show_ui' => true, 'query_var' => 'dienasgramatas', 'rewrite' => array('slug' => 'dienasgramatas'), 'hierarchical' => false, 'supports' => array('title','editor','custom-fields'), ) ); add_rewrite_rule("{$post_type}/([^/]+)/page/?([2-9][0-9]*)", "index.php?post_type={$post_type}&author_name=\$matches[1]&paged=\$matches[2]", 'top'); add_rewrite_rule("{$post_type}/([^/]+)", "index.php?post_type={$post_type}&author_name=\$matches[1]", 'top'); } static function on_load() { add_action('init',array(__CLASS__,'init')); } static function register_activation_hook() { self::init(); flush_rewrite_rules(false); } } Dienasgramatas_Urls::on_load(); }
Of course whenever you add rewrite rules you need to flush the rewrite rules or they simply won't work. Ideally you don't want to flush rules for every page load so the standard way to do it is in a plugin's activation hook. So I created a plugin for you but feel free to just use the
add_rewrite_rule()
calls in your theme'sfunctions.php
file and manually flushing your URLs by clicking "Save Changes" in the "Settings > Permalinks" section of the admin console.-
Vielen Dank!Ein wenig Ärgermit Singular/Pluralpost_type Name undesfunktioniert: http://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/Thank you a lot! A little hassle with singular/plural post_type name and it works: http://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/
- 0
- 2010-10-23
- banesto
-
* @banesto * - Super!Froh,dassich helfen konnte.*@banesto* - Awesome! Glad I could help.
- 0
- 2010-10-23
- MikeSchinkel
Ich verwende WordPress 3.0.1 und habeeinen benutzerdefinierten Post-Typnamens
'dienasgramatas'
erstellt. Mein Pluginerstellt auchbenutzerdefinierte Umschreiberegelnfür die Anzeige aller Beiträge dieses Beitragstyps und sogareine benutzerdefinierte Permalink-Struktur,um Beiträgemit diesem Beitragstyp abzufragen,die vom definierten Autor stammen. Ich kannjedoch keine Regelnfür die Paginierungerstellen:Diesist derjenige,derfunktioniert:
Esgibt diese Umschreiberegel:
Aber dieser:
Gibt diese (fehlerhafte) Umschreiberegel aus:
Wie Sie sehen können,wird
post_type
ignoriert und diese Umschreiberegelfunktioniertnicht wiegewünscht.Kannmirjemand sagen,warumesnichtfunktioniert oder wiemanes richtigmacht?
Filterfür Funktion:
Die volle Funktion lautet wiefolgt:
}
Grundbedürfnisist,dassich zu
gehenmöchteunderhalte Beiträge von 'admin'mit post_type='dienasgramata' und der zweiten Seite (z. B. 10 Beitragsversatz). Rewrite-Regel ohne Seite/2funktionierteinwandfrei. Möglicherweise handeltes sich umein Problemmit Regex oder Abfragevariablen oder um die Zuweisung von Umschreiberegeln.
Beispielfüreine Live-Site:
http://dev.fiicha.lv/jb/dienasgramatas/juris/
-funktionierteinwandfreihttp://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/
-funktioniertnichtuntenbefinden sich alle Umschreiberegeln und Abfragevariablen