Mapear múltiples URLs a la misma página
Me encontré con esta página que tiene requisitos casi similares a los míos
Múltiples endpoints a la misma página
Tengo que lograr la misma funcionalidad pero también quiero pasar algunos parámetros a la página donde se mapearán todas estas URLs. Por ejemplo:
http://mysite.com/test/link1
http://mysite.com/test/link2
http://mysite.com/test/link3
Quiero mapearlas a la misma URL
http://mysite.com/test/finalDestination
Junto con esto también quiero enviar otros parámetros como:
- correo electrónico del usuario
- nombre de usuario
Para poder usarlos en esa página para mi lógica personalizada. Sé cómo hacerlo en JSP/Java donde puedo enviarlos como parámetros de solicitud en una petición POST y recuperarlos en el JSP final
¿Cómo puedo lograr esto en WordPress usando PHP? Mi preferencia es no usar cadenas de consulta (query strings).
¿O es posible que si creo URLs como:
http://mysite.com/test/user1
http://mysite.com/test/user2
http://mysite.com/test/user3
donde user1, etc. pueden obtenerse de la base de datos y podemos asegurar que serán únicos a través de la aplicación y mapear estas URLs al mismo punto final. ¿Cómo puedo obtener el nombre de usuario en mi página final?
Gracias de antemano

Puedes usar la misma respuesta que la pregunta a la que te refieres (ya la he respondido). Así es como lo modificarías para pasar los argumentos:
<?php
add_action('init', 'add_my_rule');
function add_my_rule()
{
global $wp;
$wp->add_query_var('args');
add_rewrite_rule('test\/finaldestination\/(.*)','index.php?pagename=about&args=$matches[1]','top');
}
?>
Asumiendo que 'finaldestination' siempre permanece igual, y el nombre de página (slug) es 'about' (puedes cambiar ambos). Aplica tu plantilla personalizada a esta página, y en la plantilla, haz esto:
//si visitas http://.../test/finaldestination/name/romeo, entonces $params será name/romeo. Puedes hacer explode a esto y obtener el valor.
$params = get_query_var('args');
Después de colocar este código en tu archivo, solo ve a Ajustes>Enlaces permanentes
y presiona el botón de guardar.
No he probado esto, pero he usado algo similar en un proyecto reciente y estoy seguro de que funcionará.

Gracias por el aporte. Básicamente tengo una página con URLs como http://localhost/blog/wordpress/author/admin/ donde se muestran las publicaciones del autor relacionado. Tengo una página author.php donde estoy usando una consulta personalizada basada en algunos parámetros. Lo que quiero es que si tengo un autor con nombre "my-author", la URL debería ser http://localhost/blog/wordpress/author/my-author/ y que esto mapee con "http://localhost/blog/wordpress/author/admin/" para poder usar "my-author" en la consulta a mi base de datos y obtener sus publicaciones. No estoy seguro de qué tan factible sea esto.

Probé tu código de la siguiente manera: $wp->add_query_var('args'); add_rewrite_rule('author/(.*)','index.php?pagename=author&args=$matches[1]','top'); y cuando intenté acceder a la URL http://localhost/blog/wordpress/author/my-work/ me dio un error 404

¿Por qué estás intentando crear una URL así? WordPress ya tiene la URL de archivo de autor como esta. Entonces http://localhost/blog/author/my-author
siempre apuntará a la página de archivo para my-author
. Además, una posible razón podría ser que author
es un término reservado en el universo de WP. Deberías probar con otro término en lugar de author. Y, ¿el slug de tu página es author
?

No estoy seguro de lo que quieres decir con el slug de página como 'author'. Al ser nuevo en la plataforma me confunde. La cuestión es que estos autores serán autores invitados sin perfil almacenado o no crearemos una cuenta de usuario para ellos, todo lo que podemos hacer es almacenar algún campo de nombre de autor en la sección personalizada del post y usarlo para obtener sus posts

Ohh... si eres nuevo en la plataforma, entonces realmente no deberías modificar las URLs. ¡Lo que intentas hacer requerirá mucho más que una simple regla de reescritura de URL! Una forma sería añadir la clave de los campos meta (digamos el nombre del autor) a la URL y luego obtener los posts que tengan esta clave meta.

Eso es lo que estoy intentando lograr. Mi tema ya tiene un archivo author.php, así que lo que intento conseguir es que si alguien escribe una URL como localhost/blog/wordpress/author/aum-kumar, debería redirigir todas las URLs con el patrón localhost/blog/wordpress/author/ a la página author.php donde puedo usar el último parámetro como valor para buscar, así que en mi caso "aum-kumar" sería el valor del campo meta, pero hasta ahora no he podido lograrlo

No necesitas escribir una nueva regla porque lo que quieres ya existe. Lo que puedes hacer es crear una cuenta para el autor invitado con el rol de Contributor
, para que pueda escribir un post pero no publicarlo. De esta manera, su página de archivo será accesible justo como quieres, sin necesidad de reescribir ninguna URL. Lee más sobre los roles de WordPress: http://codex.wordpress.org/Roles_and_Capabilities

Estoy de acuerdo, pero hay algunos autores que solo quieren enviar su publicación y listo. Se me ocurrió la misma sugerencia pero fue rechazada, así que me veo obligado a buscar esta alternativa.

continuemos esta discusión en el chat

@Moderador El sistema no me permite chatear, parece que no tengo 20 de reputación en la red!

Estoy en el chat, puedes enviarme un mensaje allí si estás disponible

eso es realmente triste, ¿puedes indicarme cómo puedo lograr eso? ya que estoy atascado aquí de alguna manera

La explicación completa es bastante larga, pero te daré algunos consejos. Primero, no uses el término author
, usa algo más al escribir la regla. Usa el parámetro args
para enviar un nombre de autor a tu archivo de plantilla y obtener y mostrar las publicaciones usando este nombre.

lo intenté con writer, incluso algo como add_action('init', 'add_my_rule');
function add_my_rule() {
global $wp;
$wp->add_query_var('args');
add_rewrite_rule('writer\/(.*)','index.php?pagename=author&args=$matches[1]','top'); } pero aún no funciona. Como nota adicional, tengo una página author.php como una página personalizada en mi directorio de tema, pero sigo recibiendo 404

¡También tendrás que cambiar el slug de la página! Edita la página a la que aplicaste la plantilla y cambia el slug a writer
. Luego, en esta regla, cambia pagename=author
por pagename=writer
. Después, ve a Settings>Permalinks
y simplemente haz clic en guardar.

Entendí lo que dijiste. No estaba creando una página dentro del panel de administración, pero después de crear una página y asignarla a mi plantilla personalizada, también aparece en la barra de menú. ¿Puedo pedirle a WordPress que no muestre eso en el menú/submenú? No tengo opción para votar tu publicación, ¡has hecho mi día! :) Gracias por tu ayuda hasta ahora.

Asegúrate de agregar una URL canónica en el encabezado de las páginas duplicadas, que apunte a la instancia principal de la página... de lo contrario terminarás con contenido duplicado, lo cual es malo para SEO (solo importa si estas páginas son públicas y están indexadas).
También recomendaría usar el author.php del tema o el permalink %author% en caso de que sean usuarios regulares de WordPress. Puedes acceder a los datos del autor así:
$author = get_user_by('slug', $author_name);
$author_id = (int)$author->ID;
$name = $author->first_name.' '.$author->last_name;

Si tus palabras tienen sentido para mí correctamente, las posibles soluciones están aquí:
Para la primera parte, puedes usar el plugin WordPress Redirection para satisfacer tus necesidades fácilmente.
Para la segunda parte, puedes usar %author% para las estructuras de enlaces permanentes. Consulta el codex.
