add_rewrite_rule() no funciona

27 ene 2015, 19:42:44
Vistas: 22.8K
Votos: 2

Necesito pasar una referencia de propiedad en la última parte de una URL para buscar una entrada en la base de datos, por ejemplo,

http://example.com/cottage-details/G638/

Necesito pasar el G638 a un array para mi plugin. Lo que tengo abajo está llamando a la página cottage-details, pero está eliminando la última parte de la URL y mostrando una página vacía, en lugar de la información que deseo recuperar del servidor. Si uso

http://example.com/cottage-details/?propref=G638

funciona perfectamente.

/**
 * Etiquetas de reescritura para el plugin
 */
function dcc_rewrite_tags() {
    add_rewrite_tag('%propref%', '([^&]+)');
}

add_action('init', 'dcc_rewrite_tags', 10, 0);

/**
 * Reglas de reescritura para el plugin
 */
function dcc_rewrite_rules() {
    add_rewrite_rule('^[^/]*/([^/]*)/?','index.php?p=2&propref=$matches[1]','top');
}

add_action('init', 'dcc_rewrite_rules', 10, 0);

¿Qué está pasando?

0
Todas las respuestas a la pregunta 1
13

Tu regla de reescritura es bastante amplia y probablemente generará muchos conflictos.

add_action('init', 'dcc_rewrite_tags');
function dcc_rewrite_tags() {
    add_rewrite_tag('%propref%', '([^&]+)');
}

add_action('init', 'dcc_rewrite_rules');
function dcc_rewrite_rules() {
    add_rewrite_rule('^cottage-details/(.+)/?$','index.php?page_id=2&propref=$matches[1]','top');
}

Luego puedes acceder a la variable de consulta propref así:

$propref = get_query_var( 'propref' );

Y recuerda vaciar las reglas de reescritura; puedes hacerlo yendo a Ajustes -> Enlaces permanentes y haciendo clic en el botón de guardar.

Nota: cambié la variable de consulta p por page_id porque, como mencionaste en los comentarios, estás usando una página, no una entrada estándar.

27 ene 2015 21:28:48
Comentarios

Sí, esa es una de las muchas combinaciones que he probado. Tampoco funciona. He descargado este plugin: https://wordpress.org/plugins/monkeyman-rewrite-analyzer/ y muestra que la regla es correcta y que todo debería estar bien, pero por alguna razón, no lo está.

Badger Badger
28 ene 2015 11:51:13

Aquí funciona. ¿Puedes ser más específico sobre "no funciona"? ¿Obtienes un error HTTP? ¿No puedes obtener la variable de consulta propref? ¿Algún otro problema?

cybmeta cybmeta
28 ene 2015 11:53:48

Un vardump() del array muestra que está vacío viz: array(2) { ["propref"]=> string(0) "" ["brand"]=> string(2) "ZZ" }

Badger Badger
28 ene 2015 12:01:08

Solo puedo pensar que no lo estoy llamando correctamente, estoy usando $values['propref'] = get_query_var( "propref" );

Badger Badger
28 ene 2015 12:02:37

¿Debería WordPress estar escribiendo la regla en .htaccess? Porque no hay reglas adicionales más allá de las predeterminadas. Estoy seguro de que la reescritura es correcta, es casi como si Apache no la estuviera implementando.

Badger Badger
28 ene 2015 12:21:30

.htaccess no está involucrado en esto. Lo he probado de nuevo y está funcionando.

cybmeta cybmeta
28 ene 2015 13:00:30

¡Bueno, no está funcionando en mi instalación!

Badger Badger
28 ene 2015 15:19:06

¿Qué es cottage-details? ¿Una página o entrada? ¿Cuál es su ID?

cybmeta cybmeta
28 ene 2015 16:26:16

Lo siento, no vi esto. Es una página, el ID es 2.

Badger Badger
30 ene 2015 19:31:18

Si es una página, la regla de reescritura debe usar page_id en lugar de p. Consulta la documentación de WP Query. He editado la respuesta.

cybmeta cybmeta
14 feb 2015 14:33:06

Gracias, logré solucionarlo usando pagename en lugar de p.

Badger Badger
14 feb 2015 20:13:05

Genial. page_id o pagename funcionarán, la clave es que necesitas consultar una página, no una entrada estándar. Si esta respuesta soluciona tu problema, por favor, márcala como aceptada.

cybmeta cybmeta
14 feb 2015 21:07:12

No puedo agradecerte lo suficiente, esto finalmente funcionó para mí. El truco también es refrescar siempre la caché de los enlaces permanentes

Mr Megamind Mr Megamind
22 feb 2019 18:15:01
Mostrar los 8 comentarios restantes