Règle de réécriture de type de publication personnalisée pour l'auteur et la pagination?
-
-
* @banesto * - J'aibesoin deplus de contextepourpouvoir répondre à vos questions.Quels crochets utilisez-vous?Utilisez-vous lafonction `add_rewrite_rule ()`?Si vouspouvezpublier unexemple complet,il seraplusfacile de vous aider.*@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 - J'ai ajouté unefonctionentière avec unfiltre.il y a d'autresexemples oùje voudrais obtenirpost_type comme variable dans les réécrituresmaisilestignorémaisje crois que c'estpour lamême raison.@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 * - Pouvez-vous égalementmontrer les structures d'URL que vousessayez d'obtenirpour quenousn'ayonspas à devineret potentiellement à devinermal?Donnez quelquesexemples s'il vousplaît.*@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 - J'ai ajouté desexemplesen directet desexplications@MikeSchinkel - I added live examples and explanation
- 0
- 2010-10-23
- banesto
-
1 réponses
- votes
-
- 2010-10-23
Bonjour @banesto :
Jepense que la réponse simplepeut être que vous avezbesoin que votre URLpaginée soit spécifiée avant votre URLplus courte,mais commeje ne l'aipastestée,je ne suispas sûr à 100%.
Cela dit,j'aitoujours rencontrébeaucoup deproblèmes avec le hook
'generate_rewrite_rules'
. Je suis sûr qu'unmeilleur développeur quemoipourrait lefairefonctionner,maispourmoi,il a étébeaucoupplus simple d'utiliser lafonctionadd_rewrite_rule()
,c'est ainsi queje montre que vous devezfaire le routage de vos URL.Voici unpluginpourfaire ce que vous avez demandé (l'appel
register_post_type()
n'est là quepourpermettre à ceplugin defonctionner dansmoninstallation detest de WordPress; vouspouvez le remplacerpar votrepropre):<?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(); }
Bien sûr,chaquefois que vous ajoutez des règles de réécriture,vous devez vider les règles de réécriture,sinonellesne fonctionneronttout simplementpas. Idéalement,vousne voulezpas vider les règlespour chaque chargement depage,donc lamanière standard de lefaireest dans le hook activation d'unplugin. J'ai donc créé unpluginpour vous,maisn'hésitezpas à utiliser simplement les appels
add_rewrite_rule()
dans lefichierfunctions.php
de votrethèmeet à vidermanuellement vos URLen cliquant sur " Enregistrer lesmodifications " dans la section " Paramètres> Lienspermanents " de la console d'administration.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.-
Mercibeaucoup!Unpeu de soucis avec lenom depost_type au singulier/plurielet celafonctionne: 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 * - Génial!Heureux d'avoirpu aider.*@banesto* - Awesome! Glad I could help.
- 0
- 2010-10-23
- MikeSchinkel
J'utilise WordPress 3.0.1et j'ai créé unpost-typepersonnalisé appelé
'dienasgramatas'
. Monplugin crée également des règles de réécriturepersonnaliséespour affichertoutes lespublications de cetype depublicationet même une structure de lienpermanentpersonnaliséepourinterroger lespublications avec cetype depublicationprovenant de l'auteur défini,maisje nepeuxpas créer de règle depagination:C'est celui quifonctionne:
Cela donne cette règle de réécriture:
Mais celui-ci:
Affiche cette règle de réécriture (défectueuse):
Comme vouspouvez le voir,
post_type
estignoréet cette règle de réécriturene fonctionnepas commeelle le devrait.Quelqu'unpeut-ilme direpourquoi celane fonctionnepas ou comment y remédier?
filtrepour lafonction:
Lafonction complèteest la suivante:
}
Lebesoinfondamentalest celui oùje veux aller
et obtenez les articles de 'admin' avecpost_type='dienasgramata'et une deuxièmepage (parexemple,10post offset). La règle de réécriture sanspage/2fonctionnetrèsbien. C'estpeut-être unproblème de regex,unproblème de requête de variables ou lafaçon dont les règles de réécriture sont attribuées.
exemple de siteen direct:
http://dev.fiicha.lv/jb/dienasgramatas/juris/
-fonctionnebienhttp://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/
-ne fonctionnepasen bas,il y atoutes les règles de réécritureet les variables de requête