Al final nunca pude lograrlo con la opción del CMS Press. Pero investigando un poco más parecería que estoy llegando a alguna aproximación. Usando el plugin Custom Post Type UI creé:
- Una custom taxonomie (CT) llamada ciudad a la cual le agregué los términos necesarios (ciudad 1, ciudad 2, ciudad 3)
- Un Custom Post Type (CPT) llamado alojamiento y otro gastronomia. Al de alojamiento le puse como Custom Rewrite Slug %ciudad%/alojamiento y al de gastronomía %ciudad%/gastronomia. A ambos CPT los asocié a la CT ciudad.
Basado en
este artículo, coloqué el siguinte código en functions.php:
Código:
add_filter('post_type_link', 'ciudad_permalink', 10, 3);
function ciudad_permalink($permalink, $post_id, $leavename) {
if (strpos($permalink, '%ciudad%') === FALSE) return $permalink;
// Get post
$post = get_post($post_id);
if (!$post) return $permalink;
// Get taxonomy terms
$terms = wp_get_object_terms($post->ID, 'ciudad');
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug;
else $taxonomy_slug = 'sin-ciudad';
return str_replace('%ciudad%', $taxonomy_slug, $permalink);
}
Entonces, al crear un post de alojamiento, le selecciono la ciudad (CT) y lo guardo. El permalink pasa a ser:
http://localhost/ciudad-1/alojamiento/nombre-hotel/. Fantástico!
Ahora... cuando entraba a
http://localhost/ciudad-1/alojamiento/ me mostraba tanto los CPT de alojamiento como gastronomía. Fuck. Y lo mismo ocurría cuando entraba a
http://localhost/ciudad-1/ (aunque acá sería deseable este comportamiento
)
Busqué cuál era el template file que mostraba todo esto y se trataba de archive.php. En ese archivo coloqué el siguiente código y voilá!:
Código:
<?php
$ciudad = get_query_var( 'ciudad' ); // obtengo el término de la taxonomía 'ciudad'
$request_uri = trim($_SERVER['REQUEST_URI'], "/"); // me devuelve nombre-ciudad/post-type
$cpt = end(explode("/", $request_uri)); // me quedo sólo con la parte del post-type
if($ciudad == $cpt){
// si la dirección es http://localhost/nombre-ciudad/
echo "Esta es la home de la ciudad " . $ciudad;
}
else{
// entonces la dirección es http://localhost/nombre-ciudad/post-type/ por lo tanto usos esos datos para pasárselos a query_posts()
$args = array(
'post_type'=> $cpt,
'ciudad' => $ciudad
);
query_posts( $args );
}
?>
Por qué obtengo el CPT de esa manera tan extraña? Pues... es lo único que se me ocurrió
. Haciendo un var_dump($wp_query) no había nada que haga referencia al post_type.
No sé si este procedimiento estaría conforme con las prácticas generalmente aceptadas en el desarrollo de themes... pero por ahora es a lo máximo que pude llegar.