Mapear múltiples URLs a la misma página

20 nov 2011, 17:48:29
Vistas: 23.1K
Votos: 5

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:

  1. correo electrónico del usuario
  2. 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

0
Todas las respuestas a la pregunta 3
18

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á.

22 nov 2011 18:09:25
Comentarios

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.

Umesh Awasthi Umesh Awasthi
22 nov 2011 18:19:29

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

Umesh Awasthi Umesh Awasthi
26 nov 2011 10:03:39

¿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?

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 11:16:41

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

Umesh Awasthi Umesh Awasthi
26 nov 2011 11:50:45

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.

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 12:04:39

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

Umesh Awasthi Umesh Awasthi
26 nov 2011 12:10:31

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

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 12:22:07

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.

Umesh Awasthi Umesh Awasthi
26 nov 2011 12:26:14

continuemos esta discusión en el chat

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 12:27:55

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

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 12:30:11

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

Umesh Awasthi Umesh Awasthi
26 nov 2011 12:49:04

¡Ya intenté chatear! Pero por alguna razón no me lo permite.

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 12:53:26

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

Umesh Awasthi Umesh Awasthi
26 nov 2011 13:07:17

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.

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 13:13:04

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

Umesh Awasthi Umesh Awasthi
26 nov 2011 13:29:07

¡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.

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 13:47:17

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.

Umesh Awasthi Umesh Awasthi
26 nov 2011 14:07:52

¡De nada! ¡Me alegra haber podido ayudar! ¡Puedes votar/aceptar mi respuesta más tarde cuando tengas suficiente reputación! :)

Rutwick Gangurde Rutwick Gangurde
26 nov 2011 14:18:38
Mostrar los 13 comentarios restantes
0

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;

WP Codex: get_user_by()

5 dic 2012 11:47:20
1
-1

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.

21 nov 2011 11:23:27
Comentarios

¿Podemos hacer esto sin un plugin ya que no estoy a favor de usar plugins cuando las cosas se pueden hacer con algunas modificaciones?

Umesh Awasthi Umesh Awasthi
21 nov 2011 15:45:59