Regola di riscrittura del tipo di post personalizzato per autore e impaginazione?
-
-
* @banesto * - Hobisogno dipiù contestoperpoter rispondere alletue domande.Qualiganci stai usando?Stai usando lafunzione `add_rewrite_rule ()`?Sepuoipubblicare unesempio completo saràpiùfacile aiutarti.*@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 - Ho aggiunto l'interafunzione con unfiltro.ci sono altriesempiin cui vorrei ottenerepost_type come variabilenelle riscritturema vieneignoratoma credo che siaper lo stessomotivo.@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 * - Puoi anchemostrare quali strutture URL stai cercando di ottenerein modo danon doverindovinaree potenzialmenteindovinaremale?Fornisci alcuniesempiperfavore.*@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 - Ho aggiuntoesempie spiegazioni dal vivo@MikeSchinkel - I added live examples and explanation
- 0
- 2010-10-23
- banesto
-
1 risposta
- voti
-
- 2010-10-23
Ciao @banesto :
Penso che la risposta semplicepotrebbeessere che haibisogno cheiltuo URL dipaging sia specificatoprima deltuo URLpiùbreve,mapoichénon l'hotestatononne sono sicuro al 100%.
Detto questo,ho sempre avutomoltiproblemi con l'hook
'generate_rewrite_rules'
. Sono sicuro che uno sviluppatoremigliore dime potrebbefarlofunzionare,maperme è statomoltopiùpulito usare lafunzioneadd_rewrite_rule()
,quindi è così chemostro che devifareilpercorso degli URL.Ecco unpluginperfare ciò che hai richiesto (la chiamata
register_post_type()
è lì soloper consentire a questoplugin difunzionarenellamiainstallazione diprova di WordPress;puoi sostituirlo coniltuoproprio):<?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(); }
Ovviamente ogni volta che aggiungi regole di riscrittura devi svuotare le regole di riscrittura o semplicementenonfunzioneranno. Idealmentenon vuoi svuotare le regoleper ogni caricamento dipagina,quindiilmodo standardperfarlo ènell'hook di attivazione di unplugin. Quindi ho creato unpluginperte,ma sentiti libero di usare semplicemente le chiamate
add_rewrite_rule()
nelfilefunctions.php
deltuotemae di svuotaremanualmentei tuoi URLfacendo clic su " Salvamodifiche "nella sezione " Impostazioni> Permalink " della Console di amministrazione.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.-
Graziemille!Unpo 'di seccatura conilnomepost_type singolare/pluralee funziona: 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 * - Fantastico!Sono contento di averpotuto aiutare.*@banesto* - Awesome! Glad I could help.
- 0
- 2010-10-23
- MikeSchinkel
Utilizzo WordPress 3.0.1e ho creato unpost-typepersonalizzato chiamato
'dienasgramatas'
. Ilmioplug-in crea anche regole di riscritturapersonalizzateper la visualizzazione dituttii post di questotipo diposte persino una strutturapermalinkpersonalizzataperinterrogarei post con questotipo dipostprovenienti da un autore definito,manonposso creare regoleper l'impaginazione:Questo è quello chefunziona:
Fornisce questa regola di riscrittura:
Ma questo:
Emette questa regola di riscrittura (difettosa):
Comepuoi vedere,
post_type
vieneignoratoe questa regola di riscritturanonfunziona come dovrebbe.Qualcunopuò dirmiperchénonfunziona o come rimediare?
filtroperfunzione:
Lafunzione completa è la seguente:
}
L'esigenzafondamentale è che voglio andare a
e ottienii post di 'admin' conpost_type='dienasgramata'e la secondapagina (adesempio 10post offset). Riscrivi la regola senzapagina/2funzionabene. Forse è unproblema di regex o query vars o come vengono assegnate le regole di riscrittura.
esempio di sito live:
http://dev.fiicha.lv/jb/dienasgramatas/juris/
-funzionabenehttp://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/
-nonfunzionain fondo ci sonotutte le regole di riscritturae le variabili di query