Agregar regla de reescritura para página personalizada

19 ene 2012, 18:41:32
Vistas: 15.4K
Votos: 4

Estaba intentando crear una página específica para autores con URLs específicas y funcionaba bien, pero al crear esta URL no se tuvieron en cuenta dos factores:

  1. Conflicto de nombres de autor (nombres similares).
  2. Opción de paginación para añadir a la página del autor (para sus publicaciones)

Aquí está mi regla inicial:

function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('args');   
    add_rewrite_rule('writer\/(.*)','index.php?pagename=writer&args=$matches[1]','top'); 
    /*global $wp_rewrite;
    $wp_rewrite->flush_rules();*/
}
add_action('init', 'add_my_rule'); 

Esto funcionaba correctamente para una URL como:

www.myblog.com/writer/umesh-awasthi ,

pero puede haber más autores con el mismo nombre y esto crearía un problema. Así que planeaba tener URLs de autores como Stack Overflow:

www.myblog.com/writer/001/umesh-awasthi donde 001 es el ID de usuario que siempre será único.

El segundo problema es con la paginación, ya que puedo crear paginación en la página del autor pero cuando el usuario hace clic en la segunda página, la URL aparece como:

http://localhost/blog/wordpress/writer/umesh-awasthi/page/2/ por lo que según mi regla de reescritura de URL obtendré estos datos como parámetro umesh-awasthi/page/2 lo que significa que mi consulta no funcionará ya que esperará el nombre del autor como umesh-awasthi pero recibirá umesh-awasthi/page/2

Mi pregunta es: ¿puedo reescribir la regla para obtener los datos de esta manera en tres variables diferentes?

  1. ID de usuario
  2. Nombre del autor
  3. Número de página (si existe)

Siendo nuevo en WordPress y reescritura, no estoy seguro de cómo lograrlo. Gracias de antemano.

0
Todas las respuestas a la pregunta 1
6
function add_my_rule() {    
    global $wp; 
    $wp->add_query_var('args');   
    $wp->add_query_var('arg_username');
    add_rewrite_rule('writer/([0-9]+)/([^/]*)/page/([0-9]+)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]&paged=$matches[3]','top');
    add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top');
    /*global $wp_rewrite;
    $wp_rewrite->flush_rules();*/
}
add_action('init', 'add_my_rule');

Esto debería funcionar. Una regla de reescritura para writer/id_usuario/nombre_usuario (el nombre de usuario no se usa en la regla de reescritura pero es necesario para que funcione). La segunda regla de reescritura es igual excepto que añade paginación.


EDITADO: añadido arg_username en el código anterior.

19 ene 2012 20:43:00
Comentarios

esto no está funcionando como se esperaba, usando la regla anterior solo obtengo el user-id y no el nombre del escritor, lo que significa que para www.myblog.com/writer/001/umesh-awasthi la regla anterior solo me da 001 y no el nombre-del-escritor

Umesh Awasthi Umesh Awasthi
20 ene 2012 18:44:00

Está funcionando como dije en mi respuesta. Si tienes el ID de usuario no necesitas el nombre de usuario. Si quieres ambos, entonces puedes agregar otra variable de consulta (como arg_username) y añadirla a la regla de reescritura: add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top'); (también cámbialo en la otra regla de reescritura)

Rob Vermeer Rob Vermeer
20 ene 2012 18:48:20

tal vez estoy haciendo algo mal por falta de conocimiento pero add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]','top'); add_rewrite_rule('writer/([0-9]+)/([^/]*)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]','top'); add_rewrite_rule('writer/([0-9]+)/([^/]*)/page/([0-9]+)','index.php?pagename=writer&args=$matches[1]&arg_username=$matches[2]&paged=$matches[3]','top'); la regla aún no me da el nombre del autor.

Umesh Awasthi Umesh Awasthi
20 ene 2012 18:57:01

Edité mi respuesta.

Rob Vermeer Rob Vermeer
20 ene 2012 19:00:26

Desafortunadamente el valor de $paged siempre viene como 0, incluso cambié el valor a $page_num y agregué esto a mi función $wp->add_query_var('paged_num'); pero nada funcionó

Umesh Awasthi Umesh Awasthi
20 ene 2012 19:24:04

Error mío, revisa la respuesta actualizada (la regla de reescritura para 'paged' tenía que estar arriba).

Rob Vermeer Rob Vermeer
20 ene 2012 19:31:28
Mostrar los 1 comentarios restantes