add_rewrite_rule() no funciona
Necesito pasar una referencia de propiedad en la última parte de una URL para buscar una entrada en la base de datos, por ejemplo,
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
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?

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.

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á.

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?

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

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

¿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.

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

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.

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.
