Agregar regla de reescritura para página personalizada
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:
- Conflicto de nombres de autor (nombres similares).
- 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?
- ID de usuario
- Nombre del autor
- Número de página (si existe)
Siendo nuevo en WordPress y reescritura, no estoy seguro de cómo lograrlo. Gracias de antemano.

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.

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

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)

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.

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ó
