Una de las funcionalidades de Mostrosity, nuestro juego GPL, es la de compartir el personaje que el jugador va personalizando (vía Twitter, Facebook,…).
Ya que tenemos una tabla en una base de datos donde vamos almacenando qué opción tiene seleccionada el usuario para cada parte del cuerpo (Brazo nº 3, Pies nº2, sonido nº5,…) nos pareció evidente hacer una plantilla de página en la web, enviar el id del mostro como un parámetro GET, y andando…
Pero ya que la web es WordPress, ¿por qué no usar sus permalinks, que quedan tan amigables?
Se trata de un par de funciones en functions.php de nuestro theme (y sus correspondientes hooks):
/* gestión de URL's MiMostro
// recibiremos url's del tipo http://mostrosity.com/mimostro/999
// donde 999 es el id del "mostro" al que se quiere acceder
*/
function SI2_mostro_var($vars) {
$vars[] = «idMostro»; //en la variable idMostro recibiremos el parámetro
return $vars;
}
// hacemos el hook
add_filter(‘query_vars’, ‘SI2_mostro_var’); //https://codex.wordpress.org/WordPress_Query_Vars
function add_rewrite_rules($rules) {
$aux_rules = array(‘mimostro/([^/]+)/?$’ => ‘index.php?pagename=mimostro&idMostro=$matches[1]’);
$rules = $aux_rules + $rules;
return $rules;
}
// enganchamos la función al hook
add_filter(‘rewrite_rules_array’, ‘add_rewrite_rules’);
// esto solo hay que ejecutarlo una vez, debe quedar comentado (es equivalente a regenerar permalinks desde el admin)
//flush_rewrite_rules();
Después en la página con slug mimostro, ya podemos acceder a la variable:
<? if(isset($wp_query->query_vars['idMostro'])) {
$idMostro = urldecode($wp_query->query_vars['idMostro']);
echo «DEBUG idMostro=$idMostro»;
} ?>
¡Gracias a Lluis Torns!