Iniciador del debate
oterox
(@oterox)
De momento he conseguido que me funcione para el single con esto:
add_filter('post_type_link', 'ox_post_type_link', 1, 3);
function ox_post_type_link( $link, $post = 0 ){
if ( $post->post_type == 'plan' ){
$terms = wp_get_object_terms( $post->ID, 'tax_destination' );
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
$taxonomy_slug = $terms[0]->slug;
return home_url( $taxonomy_slug .'/' . $post->post_name );
} elseif ( $post->post_type == 'area' ){
$terms = wp_get_object_terms( $post->ID, 'tax_destination' );
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
$taxonomy_slug = $terms[0]->slug;
return home_url( $taxonomy_slug .'/zonas/' . $post->post_name );
} elseif ( $post->post_type == 'itinerary' ){
$terms = wp_get_object_terms( $post->ID, 'tax_destination' );
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
$taxonomy_slug = $terms[0]->slug;
return home_url( $taxonomy_slug .'/itinerarios/' . $post->post_name );
} else {
return $link;
}
}
y esto:
add_action( 'init', 'ox_rewrite_add_rewrites' );
function ox_rewrite_add_rewrites()
{
//(NO FUNCIONA) Home destino /granada
add_rewrite_rule(
'^([^/]+)/?$', //un solo segmento
'index.php?post_type=destination',
'top'
);
//(NO FUNCIONA) Archivo para planes /granada/planes
add_rewrite_rule(
'([^/]+)/planes/?$', //un segmento + el literal "planes"
'index.php?post_type=plan&tax_destination=$matches[1]',
'top'
);
//(SI FUNCIONA) Detalle plan /granada/que-hacer-en-granada
add_rewrite_rule(
'^([^/]+)/([^/]+)/?$', //un segmento y despues otro segmento
'index.php?plan=$matches[2]',
'top'
);
//(SI FUNCIONA) Detalle zona /granada/zonas/albaicin
add_rewrite_rule(
'^([^/]+)/zonas/([^/]+)/?$', //un segmento y despues otro segmento
'index.php?area=$matches[2]',
'top'
);
//(SI FUNCIONA) Detalle itinerario /granada/itinerarios/granada-en-un-dia
add_rewrite_rule(
'^([^/]+)/itinerarios/([^/]+)/?$', //un segmento y despues otro segmento
'index.php?itinerary=$matches[2]',
'top'
);
flush_rewrite_rules();
}
Pero sigo sin conseguir que funcione para los archivos de los cpt y la home
Iniciador del debate
oterox
(@oterox)
Muchas gracias Pablo, ya conocía ese artículo desde hace muchos años 😉
Pero en mi caso tengo que hacer bastante más.
Sobre todo porque el primer segmento de la url es el destino y es una taxonomia, no tiene siempre el mismo valor. Además en cada caso debe sacar solo registros cpts que tengan esa taxonomia.
ej: /es/granada/planes (/idioma/taxonomia/customPostType)
«es» es el idioma que pueden ser varios.
«granada» es una taxonomia asociada al cpt planes
«planes» es el custom post type y solo tengo que sacar los planes que estén asignados al term granada.
Este sería un ejemplo para el archivo del cpt planes.
Y luego generar todas las urls correctamente en archivos, single, productos, filtros, etc.
Ahora mismo tengo ya gran parte hecha y lo estoy moviendo a un plugin básico. Luego pongo el link al gist.
Un saludo.
@oterox yo también ando enfrascado en un tema de reescritura de permalinks y sinceramente, es odioso. Quizá te pueda ayudar de alguna forma engancharte a request
, algo así:
add_filter('request', 'my_function_alter_request')
function my_function_alter_request($request){
$dummy_query = new WP_Query(); // the query isn't run if we don't pass any query vars
$dummy_query->parse_query( $request );
// this is the actual manipulation; do whatever you need here
if ( $dummy_query->is_home() )
$request['category_name'] = 'news';
return $request;
}
Está documentado en https://codex.wordpress.org/Plugin_API/Filter_Reference/request
-
Esta respuesta fue modificada hace 6 años, 3 meses por David Navia.
Iniciador del debate
oterox
(@oterox)
Muchas gracias David,
lo miraré, aunque creo que no me va a hacer falta.
Al final tengo lo importante en la url, que es la taxonomia y el correspondiente post_type.
Y si si y si, los permalinks son un infiernoooo!