Codi per afegir a la url d’un Cutsom Post Type, una taxonomia.
Ex:
Passem de: Domini/directorio/slug-post/
A: Domini/directorio/Taxonomia/slug-post/
A tindre en compte: quan declarem el CTP, l’opció de slug ha de tindre un, en el cas de l’exemple una forma com: directorio/%tax%
El codi el que fa és substituir el %tax% per la categoria i després fem la configuració del rewrite perquè aquests enllaços no siguin 404.
/**
* Afegim a la url de wordpress la taxonomia
* Fem servir el "post_type_link" per trucar el link
* Fem servir el "generate_rewrite_rules" perque no surti 404 al visitar el link trucat.
* Hem de referscar els enllaços permanets
*
*
*/
add_filter('post_type_link', 'my_custom_permalink', 10, 3);
function my_custom_permalink($permalink, $post_id, $leavename)
{
if ((strpos($permalink, '%tax%') === FALSE)) // %tax% -> string que posem al slug del CTP. Ex: directorio/%tax%
return $permalink;
$post = get_post($post_id);
if (!$post) return $permalink;
$y_terms = wp_get_object_terms($post->ID, 'categorias_directorio'); // canviar per el nom de la categoria
if (!is_wp_error($y_terms) && !empty($y_terms) && is_object($y_terms[0])) $y_taxonomy_slug = $y_terms[0]->slug;
return str_replace('%tax%', $y_taxonomy_slug, $permalink); // %tax%
}
function directorio_cpt_generating_rule($wp_rewrite)
{
$rules = array();
$terms = get_terms(array(
'taxonomy' => 'categorias_directorio', // canviar per el nom de la categoria
'hide_empty' => false,
));
$post_type = 'directorio'; // canviar per el nom del CTP
foreach ($terms as $term) {
// canviar per el slug del CTP. Primera part nom normal. Taxonomia. Nom del CTP.
$rules['directorio/' . $term->slug . '/([^/]*)$'] = 'index.php?post_type=' . $post_type . '&directorio=$matches[1]&name=$matches[1]';
}
// merge with global rules
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'directorio_cpt_generating_rule');