add_rewrite_rule y problema de paginación

2

Tengo un problema al escribir una regla de reescritura correcta.

Básicamente, aquí están los ejemplos de la url que quiero:

/myPage/mySuPage

Luego lo mismo con la paginación
/myPage/mySuPage/page/3

Luego, la página básica, con 2 parámetros, sin paginación
/myPage/mySuPage/param1/param2

Luego, el que tiene 2 parámetros y la paginación
/myPage/mySuPage/param1/param2/page/3

Más o menos, lo tengo trabajando con diferentes reglas para cada caso, pero si las coloco en una fila, nada funciona.

Aquí están las reglas que escribí:

add_rewrite_rule(
    'myPage/mySuPage/([^/]*)/([^/]*)/?',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]',
    'top' );

add_rewrite_rule(
    'myPage/mySuPage/([^/]*)/([^/]*)/page/([0-9]{1,})?',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]&pageds=$matches[3]',
    'top' );


add_rewrite_rule(
    'myPage/mySuPage/(.+?)(/page/([0-9]+))?/?$',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]',
    'top' );
    
pregunta Ludo 30.05.2011 - 11:28

1 respuesta

6

Sus primeras dos reglas de reescritura no terminan con $ , lo que indica que la URL debe detenerse allí. Por lo tanto, myPage/mySuPage/param1/param2/page/3 aún coincidirá con el primer patrón, porque simplemente puede ignorar la parte /page/3 al final. Las siguientes reglas de reescritura nunca se utilizarán.

Con mi complemento del analizador Rewrite I was capaz de simplificar sus reglas de reescritura a estas dos: una sin params y solo paginación opcional, y una con params y paginación opcional. La combinación de estos dos en uno no funcionó porque los parámetros opcionales "comen" la parte de paginación.

add_rewrite_rule(
    'myPage/mySuPage(/page/([0-9]+)?)?/?$',
    'index.php?pagename=myPage/mySuPage&pageds=$matches[2]',
    'top'
);

add_rewrite_rule(
    'myPage/mySuPage/([^/]*)/([^/]*)(/page/([0-9]+)?)?/?$',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]&pageds=$matches[4]',
    'top'
);
    
respondido por el Jan Fabry 30.05.2011 - 11:46

Lea otras preguntas en las etiquetas