Usando un "slug" personalizado/dinámico para una página
Tengo una página personalizada que usa una plantilla llamada "Stores" http://example.com/stores/
. Esta página tendrá una lista de estados y/o empresas como categorías. Para este sistema tengo un tipo de entrada personalizada "store" que puede ser asignada a una única categoría (ya sea estado o empresa),
Cada tienda no es una página específica, sino información de contacto que se muestra en un diseño tipo directorio telefónico para estados/empresas.
El problema que tengo ahora es, ¿cómo puedo hacer que mi plantilla "Stores" acepte solicitudes de URL desde http://example.com/stores/california/
(sin generar error 404)?
California
en este sentido no es una página, sino una consulta. Tampoco quiero crear manualmente una página para cada una de estas categorías (ya que se extrae de la base de datos y es automático). Podría usar ?state=california
para este propósito, pero me gustaría aprender la forma correcta de permitir esta URL dentro de WordPress.
¿Es la forma correcta editar el archivo htaccess manualmente? ¿No se sobrescribiría si editas la estructura de enlaces permanentes? ¿Cómo formatearía el htaccess?

Crear una Plantilla de Página
Añade una nueva página y asígnale el slug stores
Añadir una Variable de Consulta Pública
add_filter('query_vars', 'add_state_var', 0, 1);
function add_state_var($vars){
$vars[] = 'state';
return $vars;
}
Añadir una Regla de Reescribir URL
Esto dirigirá la solicitud a tu página stores
.
add_rewrite_rule('^stores/([^/]*)/?','index.php?post_type=page&name=stores&state=$matches[1]','top');
Dentro de tu Plantilla
Puedes acceder a tu variable de estado de la siguiente manera:
$state = get_query_var('state');
Actualizar tus Enlaces Permanentes
Visita Ajustes->Enlaces permanentes para actualizar tus enlaces y añadir tu regla de reescritura.

Disculpa la demora. Este código funciona, pero hay un problema que no puedo identificar con el wiki. Ahora cuando voy a stores/alabama en lugar de obtener un error 404, carga correctamente la página de Tienda. Pero me redirige de vuelta a /stores/, y no hay rastro de la variable de consulta "state" (incluso hice un dump de $wp_query en mi plantilla, nada sobre alabama). ¿Por qué me redirige de vuelta a /state/? Actualicé los enlaces permanentes (por eso la URL sigue "funcionando").

Actualización: Si elimino post_type=page&name=stores
entonces llego a la página de destino, sin embargo la variable de consulta "state" sí existe. La redirección está eliminando la variable de consulta, aunque todavía no estoy seguro por qué especificar el tipo de publicación está causando una redirección en primer lugar.

La solución con 'post_type=page&name=stores' tampoco funciona para mí. Tuve que usar el enfoque de la solución de Jared con los IDs de página.

Encontré la respuesta en el sitio web de WordPress y he probado la solución: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule#Using_Custom_Templates_with_custom_querystring
Crear una plantilla de página
Crea una plantilla de página para tiendas y aplícala a una página.
$stores = get_query_var('stores');
Añadir una etiqueta de reescritura
En tu archivo functions.php añade una etiqueta de reescritura, que le indica a WordPress que debe buscar esa etiqueta específica.
function custom_rewrite_tag() {
add_rewrite_tag('%stores%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
Añadir una regla de reescritura
Ahora para formatear la URL y dirigirla al index.php con las variables, ingresa lo siguiente en tu functions.php. Nota: Debes actualizar el page_id al ID de la página de tiendas (en este ejemplo es 12).
function custom_rewrite_rule() {
add_rewrite_rule('^stores/([^/]*)/?','index.php?page_id=12&stores=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
Desde ahí puedes navegar a /stores/south-dakota/ y la variable $stores en tu plantilla de página será "south-dakota".

Yo también estaba intentando hacer lo mismo y finalmente lo logré de la siguiente manera.
Añade el siguiente código a tu archivo functions.php dentro de tu tema.
add_filter('query_vars', 'add_state_var', 0, 1);
function add_state_var($vars){
$vars[] = 'state'; // Añade la variable 'state' a las variables de consulta
return $vars;
}
// Añade una regla de reescritura para URLs del tipo /stores/estado/
add_rewrite_rule('^stores/([^/]+)/?$','index.php?pagename=stores&state=$matches[1]','top');
Dentro de tu plantilla, obtén la variable de consulta usando esto
$state = get_query_var('state'); // Obtiene el valor del parámetro 'state' de la URL

Aquí tienes un ejemplo funcional para gestionar slugs dinámicos y asignar plantillas:
Gestiona tu endpoint o slug personalizado de forma dinámica o defínelo en un archivo
/** Establece regla de reescritura para la tabla de lista de usuarios personalizada */
$customendpoint = get_option('dynamic_slug_custom_endpoint');
add_action('init', 'setRewriteRule');
function setRewriterule() {
add_rewrite_rule($customendpoint . '/?', 'index.php?' . $customendpoint . '=parent-xml-page', 'top');
}
/** Lista blanca para parámetros de consulta específicos */
add_filter('query_vars', 'getQueryvar');
public function getQueryvar($query_vars) {
$query_vars[] = $customendpoint;
return $query_vars;
}
Incluye tu plantilla personalizada para ese slug:
/** Verifica el parámetro de consulta y redirige al archivo de plantilla */
add_action('template_include', 'redirectTemplate');
function redirectTemplate($template) {
if (get_query_var($customendpoint == false || get_query_var($customendpoint == '') {
return $template;
}
return 'your-template.php';
}
