Afegim a la url del CTP la taxonomia

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');