Como hacer que WordPress tome parámetros personalizados en la URL

Posted by – 2009-12-15

Supongamos que tuviéramos que manejar alguno de estos casos típicos en que necesitamos recibir parámetros, como ser “rubro”, “localidad”, o “nombre”, por ejemplo, utilizando “pretty permalinks”.

Esto es lo que tuve que hacer para que WP tome http://localhost/test/nombre/daniel/ es decir, “daniel”, el valor para “nombre”.

En functions.php del theme activo:


/*
Adaptado del ejemplo "A Quick and dirty example for rewriting http://mysite/project/1 into http://mysite/index.php?pagename=project&id=1"
de http://codex.wordpress.org/Function_Reference/WP_Rewrite
Por HighToro - 2009-12-01.
Este codigo debe colocarse en el archivo functions.php del theme activo.
Si todo funciona correctamente, se debería crear un registro "_transient_rewrite_rules" en la tabla (el_sitio)_options que comience asi:
a:636:{s:11:"nombre/(.+)";s:44:"index.php?pagename=nombre&nombre=$matches[1]";s:12:"robots\.txt$"; ...
*/

add_filter('rewrite_rules_array','wp_insertMyRewriteRules');
add_filter('query_vars','wp_insertMyRewriteQueryVars');
add_filter('init','flushRules');

// Remember to flush_rules() when adding rules
function flushRules() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}

// Adding a new rule
function wp_insertMyRewriteRules($rules) {
$newrules = array();
$newrules['nombre/(.+)'] = 'index.php?pagename=nombre&nombre=$matches[1]';
return $newrules + $rules;
}

// Adding the id var so that WP recognizes it
function wp_insertMyRewriteQueryVars($vars) {
array_push($vars, 'nombre');
return $vars;
}

Luego, en el archivo nombre.php del theme pondremos este template:


/*
Template Name: Buscador de nombre
Por HighToro - 2009-12-01.
*/

// Codigo para agregar al inicio del nombre.php (del theme activo), antes de la llamada get_header();
global $wp_query, $wp_rewrite;
$nombre_solicitado = '';
if ($wp_rewrite->using_permalinks()) { // WordPress using Pretty Permalink structure
$nombre_solicitado = $wp_query->query_vars['nombre'];
} else { // WordPress using default pwrmalink structure like www.site.com/wordpress/?p=123
$nombre_solicitado = (isset($_GET['nombre'])) ? htmlspecialchars($_GET['nombre']) : '';
}

// Y luego el header y todo el templateo de siempre de WP.
get_header();
// ... (Mucho codigo PHP y HTML mezclados)...
get_footer();

Al ser un template (o “plantilla“), debe ser llamado desde una página. En el caso de nuestro ejemplo, a esta página la llamaremos “nombre” y debería quedar así: http://localhost/test/nombre/ colgando del raíz.

Espero que a alguien le sirva, pues en la web no está ni “todo junto” ni muy claro. Acá lo tienen andando luego de que lo hiciera, rompiera y corrigiera. Lo probé en un entorno limpio y anduvo ok.

0 Comments on Como hacer que WordPress tome parámetros personalizados en la URL

Respond | Trackback

Respond

Comments

Comments