¿Cómo crear rutas URL personalizadas?
2 respuestas
- votos
-
- 2011-08-19
Agregueesto alfunctions.php de sutema,o póngaloen un complemento .
add_action ('init','wpse26388_rewrites_init'); function wpse26388_rewrites_init () { add_rewrite_rule ( 'propiedades/([0-9] +)/? $', 'index.php?pagename=properties & amp;property_id=$ coincide con [1]', 'parte superior' ); } add_filter ('query_vars','wpse26388_query_vars'); function wpse26388_query_vars ($ query_vars) { $ query_vars []='property_id'; return $ query_vars; }
Esto agrega una regla de reescritura que dirige las solicitudes a
/properties/
con cualquier combinación denúmeros después depagenameproperties
,con la consulta varproperty_id
establecer. Solo asegúrese de visitar lapágina de configuración deenlacespermanentes yguardarparaeliminar las reglas de reescritura,para que seincluyaestanueva regla.En suplantilla
page-properties.php
,get_query_var ('property_id')
devolveráel ID depropiedad si se configuró,sino loestá,entoncesmostrará laspropiedadespredeterminadaspágina.Add this to your theme's functions.php, or put it in a plugin.
add_action( 'init', 'wpse26388_rewrites_init' ); function wpse26388_rewrites_init(){ add_rewrite_rule( 'properties/([0-9]+)/?$', 'index.php?pagename=properties&property_id=$matches[1]', 'top' ); } add_filter( 'query_vars', 'wpse26388_query_vars' ); function wpse26388_query_vars( $query_vars ){ $query_vars[] = 'property_id'; return $query_vars; }
This adds a rewrite rule which directs requests to
/properties/
with any combination of numbers following to pagenameproperties
, with the query varproperty_id
set. Just be sure to visit your permalinks settings page and save to flush rewrite rules, so this new rule will be included.In your
page-properties.php
template,get_query_var('property_id')
will return the property id if it was set, if it's not then show the default properties page.-
Estoestuvo CERCA detrabajarparamí,peronecesitaba agregar: add_filter ('init','flushRules'); functionflushRules () { global $ wp_rewrite; $ wp_rewrite->flush_rules (); }This was CLOSE to working for me but I needed to add: add_filter('init','flushRules'); function flushRules(){ global $wp_rewrite; $wp_rewrite->flush_rules(); }
- 5
- 2012-11-13
- tooshel
-
@tooshel definitivamenteno deseaeliminar las reglasen cada solicitud,es una operación costosa y ralentizará su sitio.solonecesitaeliminar las reglas una vez,en la activación del complemento,o simplemente visitando lapágina de configuración deenlacespermanentes.@tooshel you definitely don't want to flush rules on every request, it is an expensive operation and will slow your site to a crawl. you only need to flush rules once, on plugin activation, or just by visiting the permalinks settings page.
- 23
- 2012-11-13
- Milo
-
Sí,loentiendo...pero cuandoestásprobando,¡esbueno queesté ahí!Yeah, I get that . . . but when you are testing it's nice that it's in there!
- 1
- 2012-11-14
- tooshel
-
Una regexp de reescritura de URLmásinteligentepodría ser `` `^properties/([0-9] +)/?` ``.De lo contrario,coincidiría con algo como `` `ejemplo/propiedades/1```A smarter rewrite url regexp might be ```^properties/([0-9]+)/?```. Otherwise it would match something like ```example/properties/1```
- 3
- 2014-12-12
- Ryan Taylor
-
@RyanTaylor,¿estás seguro deeso?no captura `example/properties/1` cuando lopruebo.@RyanTaylor are you sure about that? it doesn't capture `example/properties/1` when I test it.
- 0
- 2014-12-12
- Milo
-
¿Cuáles la ubicación del archivopage-properties.php?Lopuse dentro del directorio de complementos.¿Estábien?What is location of page-properties.php file? I put it inside plugin directory. Is that right?
- 0
- 2016-06-30
- Farid Movsumov
-
Los archivos detema de @FeridMovsumov siempre se cargan desdeel directorio detemas activo actual,amenos que [agregue unfiltro] (https://developer.wordpress.org/themes/basics/template-hierarchy/#filter-hierarchy)para cargarlos desde otro lugar.@FeridMovsumov theme files are always loaded from the current active theme directory, unless you [add a filter](https://developer.wordpress.org/themes/basics/template-hierarchy/#filter-hierarchy) to load them from elsewhere.
- 0
- 2016-06-30
- Milo
-
Hola @Milo,estaes una hermosapieza de código.¿Sabes cómo hacer queestonoentreen conflicto cuando usas $paged=(get_query_var ('paged'))?get_query_var ('paginado'): 1;?Lafunción captura $page (y la dejaen blanco) ynopuedo continuar con lapaginación.Hello @Milo, this is a beautiful piece of code. Do you know how to make this not clash when using $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ? The function is capturing $page (and leaving it blank) and I'm not able to continue paginating.
- 0
- 2017-08-08
- Jaypee
-
- 2017-05-21
Otraforma de hacerlo:
add_action('init', function() { add_rewrite_rule( '^properties/([0-9]+)/?', 'index.php?pagename=properties&property_id=$matches[1]', 'top' ); }, 10, 0); add_action('init', function() { add_rewrite_tag( '%property_id%', '([^&]+)' ); }, 10, 0);
Another way to do it:
add_action('init', function() { add_rewrite_rule( '^properties/([0-9]+)/?', 'index.php?pagename=properties&property_id=$matches[1]', 'top' ); }, 10, 0); add_action('init', function() { add_rewrite_tag( '%property_id%', '([^&]+)' ); }, 10, 0);
-
La respuesta aceptadafunciona con 4.7 (y 4.8),noestoy seguro depor qué cree queno.Su códigoesencialmente hace lomismo,`add_rewrite_tag` agrega la variable de consulta a lamismamatriz queelfiltro` query_vars`.The accepted answer works with 4.7 (and 4.8), not sure why you think it doesn't. Your code is essentially doing the same thing, `add_rewrite_tag` adds the query var to the same array as the `query_vars` filter.
- 2
- 2017-07-07
- Milo
-
@Milo,probablementenofuncionóparamí,pero yanotengo un 4.7 amano,así quenopuedo verificar.Editarémi respuesta.@Milo it probably didn’t work for me, but I don’t have a 4.7 handy anymore so I can’t check. I will edit my answer.
- 0
- 2017-07-08
- Christian Lescuyer
-
@Milo Aunquepersonalmenteprefiero reescribir laetiqueta,aúnprobé la respuesta aceptada yfunciona.Aunque solo algunosgustospersonales.@Milo Although I personally prefer rewrite tag, but still tested the accepted answer and it works. Just some personal tastes, though.
- 0
- 2017-07-08
- Jack Johansson
-
Lasetiquetas de reescritura de @JackJohansson sonnecesarias cuando lasestás usando [en unpermastruct] (https://codex.wordpress.org/Function_Reference/add_permastruct).Es solo un dato adicional que WordPressnunca usaen este caso.@JackJohansson rewrite tags are necessary when you're using it [in a permastruct](https://codex.wordpress.org/Function_Reference/add_permastruct). It's just an extra bit of data that WordPress never uses in this case.
- 1
- 2017-07-08
- Milo
-
Ambas reglas sepueden agregar almismométodo,terminandoen unafunciónmás limpia y útil a la que volver y averiguar si seestá realizando untrabajo demantenimiento.both rules can be added to the same method, ending up in a cleaner and more useful function to come back to and figure out if doing maintenance work
- 0
- 2018-07-14
- eballeste
Tengo un requisitomuypeculiar,con suerte,puedoexplicarlo sin ser demasiado confuso.Creé unaplantilla depágina dondeenumero algunaspropiedades que obtengo de un archivo XMLexterno,hasta ahorano hayproblemas,digamos que la URLes así:
Cadapropiedadtiene unenlace que debe redirigir al usuario a unapágina de "Propiedad única" quemuestramásinformación sobreella.Mepreguntaba si hay unamanera de hacerelenlace comoeste:
Donde
123
seríaelid de lapropiedad.Entonces,sitengo la URL comoproperties/some_id
,quieropoder cargar un archivo de vista (comosingle.php
opage.php
archivos)peroespecíficoparaesta condición de URL.¿Esestoposible?