¿Es posible tener URLs dinámicas en WordPress?

18 jun 2014, 16:26:18
Vistas: 14.3K
Votos: 2

Sé que el título puede parecer un poco confuso, pero lo que busco es algo posible en Symfony o RoR. Tengo una página con esta URL: http://mydomain.com/job/. Ahora quiero esta estructura de URL http://mydomain.com/job/php-developer/45, http://mydomain.com/job/java-developer/46. Los parámetros después de /job/ son dinámicos, y no son ninguna página o post, pertenecen a una página job

¿Es esto posible en WordPress?

PREGUNTA ACTUALIZADA:

Según la respuesta de @Gioia actualicé mi código.

A continuación mi código:

add_filter('query_vars', 'add_query_vars');
function add_query_vars($aVars) {
    $aVars[] = "job_title"; // Añade job_title como variable de consulta
    $aVars[] = "job_id"; // Añade job_id como variable de consulta
    return $aVars;
}

add_action( 'init', 'add_rules' );  
function add_rules() {
    add_rewrite_rule('^/job/([^/]*)/([^/]*)/?','index.php?page_id=13338&job_title=$matches[1]&job_id=$matches[2]','top');
}

Ahora esto me devuelve error 404 cuando intento esta URL http://mydomain.com/job/php-dev/45. Pero cuando pruebo esta URL http://mydomain.com/index.php?page_id=13338&job_title=php-dev&job_id=45 funciona correctamente.

7
Comentarios

Podrías lograr /job/titulo-del-trabajo/ usando un tipo de publicación personalizado y posiblemente /45 configurando una estructura personalizada con tu tipo de publicación.

Howdy_McGee Howdy_McGee
18 jun 2014 16:42:01

mis URLs son dinámicas, /job/php-developer/45, /job/java-developer/46 etc

Niraj Chauhan Niraj Chauhan
18 jun 2014 17:21:00

¿Cuál es el propósito de 45 / 46? ¿Son contadores? ¿Qué representan para hacerlos dinámicos?

Howdy_McGee Howdy_McGee
18 jun 2014 17:41:15

Mi objetivo es lograr esta URL http://mydomain.com/job/?title=php-developer&job_id=45, pero para que esta URL sea más amigable para SEO, quiero algo como esto http://mydomain.com/job/php-developer/45

Niraj Chauhan Niraj Chauhan
18 jun 2014 17:52:44

¿Donde el ID del trabajo es un valor meta de algún tipo? Eso no es una tarea sencilla.

Howdy_McGee Howdy_McGee
18 jun 2014 18:05:55

@Howdy_McGee ese es algún ID almacenado dentro de alguna tabla

Niraj Chauhan Niraj Chauhan
18 jun 2014 18:35:59

Oye, no olvides actualizar tu pregunta para eliminar la / incorrecta :)

Gioia Fueter Gioia Fueter
19 jun 2014 11:16:11
Mostrar los 2 comentarios restantes
Todas las respuestas a la pregunta 1
8

No estoy completamente seguro de entender a qué te refieres con que los parámetros caen bajo un trabajo de página, pero si quieres decir que diferentes contenidos se cargan en la misma página usando javascript / ajax, podrías usar https://github.com/browserstate/history.js/ para generar la URL correspondiente para cada estado. Es difícil decir más sobre cómo podrías implementar esto sin saber más sobre lo que estás intentando hacer.


ACTUALIZACIÓN

Creo que deberías usar reglas de reescritura personalizadas. Eso es lo que WordPress usa para crear las URLs bonitas, y tiene una API para agregar las tuyas propias.

Primero necesitas agregar las etiquetas que necesitas rastrear, en tu caso title y job_id. En realidad probablemente deberías cambiar title por algo como job_title, no estoy completamente seguro de que title causaría un problema, pero como es algo en WordPress, es mejor prevenir.

Usé el siguiente código, necesitas agregarlo a tu function.php, en tu tema.

add_filter('query_vars', 'add_query_vars');
function add_query_vars($aVars) {
    $aVars[] = "job_title"; 
    $aVars[] = "job_id"; 
    return $aVars;
}  

Más información: http://codex.wordpress.org/Rewrite_API/add_rewrite_tag

Luego agregas la regla de reescritura, también en functions.php:

add_action( 'init', 'add_rules' );  
function add_rules() {
    add_rewrite_rule('^job/([^/]*)/([^/]*)/?','index.php?page_id=12&job_title=$matches[1]&job_id=$matches[2]','top');
}

Deberías reemplazar el page_id por el id de la página de trabajo. Más información: http://codex.wordpress.org/Rewrite_API/add_rewrite_rule.

Una vez que hayas guardado el archivo, necesitas ir a ajustes -> enlaces permanentes y simplemente guardar sin cambiar nada. Eso asegurará que tus ajustes se carguen correctamente.

Puedes instalar el plugin rewrite inspector para ver todas las reglas de reescritura aplicadas y comprobar que las tuyas están presentes. https://wordpress.org/plugins/rewrite-rules-inspector/

Puedes instalar el plugin debug bar para inspeccionar la página y ver qué regla de reescritura se está aplicando a la página: https://wordpress.org/plugins/debug-bar/

Y aquí tienes más información sobre reglas de reescritura en general: http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/


ACTUALIZACIÓN 2

Para recuperar los parámetros:

if (isset($wp_query->query_vars['job_title'])) {
    $job_title = urldecode($wp_query->query_vars['job_title']);?>
<?php }
18 jun 2014 17:36:46
Comentarios

Mi objetivo es lograr esta URL http://mydomain.com/job/?title=php-developer&job_id=45, pero para que esta URL sea más amigable para SEO, quiero algo como esto http://mydomain.com/job/php-developer/45

Niraj Chauhan Niraj Chauhan
18 jun 2014 17:47:03

Podrías usar reglas de reescritura personalizadas:

Gioia Fueter Gioia Fueter
18 jun 2014 20:38:14

Hola, gracias por tu respuesta. Probé tu código, pero muestra una página 404, por favor revisa mi edición anterior en la pregunta.

Niraj Chauhan Niraj Chauhan
19 jun 2014 10:07:20

Hola, acabo de probar el código y funcionó para mí. Primero, verifica que hayas cambiado el id de la página que venía en el código (?page_id=12) por el id de tu página de trabajos (puedes ver el id de la página cuando estás editándola, es parte de la URL: post.php?post=6&action=edit, 6 es el id de la página). También asegúrate de que después de cada cambio vayas a la página de configuración de enlaces permanentes y guardes los cambios.

Gioia Fueter Gioia Fueter
19 jun 2014 10:36:40

Cambié el ID de la página por el mío, si accedo a esta URL index.php?page_id=13338&job_title=$matches[1]&job_id=$matches[2] funciona, pero con la URL personalizada no. ¿Necesito agregar add_rewrite_tag? ¿o alguna modificación en el htaccess?

Niraj Chauhan Niraj Chauhan
19 jun 2014 10:39:51

Solo para asegurarnos, ¿fuiste a la configuración de enlaces permanentes y guardaste los cambios?

Gioia Fueter Gioia Fueter
19 jun 2014 10:41:43

Sí, guardé los enlaces permanentes, mi estructura de enlaces permanentes es de esta manera /%postname%/

Niraj Chauhan Niraj Chauhan
19 jun 2014 10:44:49

Continuemos esta discusión en el chat.

Gioia Fueter Gioia Fueter
19 jun 2014 10:49:58
Mostrar los 3 comentarios restantes