Mon nom de post: 127 heures
Mon nom de taxonomie: Acteurs
J'ai ajouté des noms de taxonomie pour le post: James Franco
Mon lien de publication: http: // website.com/ 127-hours.html
Je voudrais: http: // website.com/ 127-hours-james-franco.html
Je voudrais ajouter une valeur de taxonomie personnalisée dans l'URL.
Mon functions.php code (pour la taxonomie des acteurs)
function add_custom_taxonomies()
{
register_taxonomy('actor', 'post', array(
'hierarchical' => false,
'labels' => array(
'name' => _x('Actor', 'taxonomy general name') ,
'singular_name' => _x('Actor', 'taxonomy singular name') ,
'search_items' => __('Actor Search') ,
'all_items' => __('All Actors') ,
'edit_item' => __('Edit Actor') ,
'update_item' => __('Update Actor') ,
'add_new_item' => __('Add New Actor') ,
'new_item_name' => __('New Actor Name') ,
'menu_name' => __('Actors') ,
) ,
'rewrite' => array(
'slug' => 'actor', // This controls the base slug that will display before each term
'with_front' => false, // Don't display the category base before "/locations/"
'hierarchical' => false
) ,
));
}
add_action('init', 'add_custom_taxonomies', 0);
Ce que vous souhaitez faire est de disposer de votre taxonomie à utiliser dans la structure de liens permanents, par exemple. /%actor%/%postname%
comme vous l'avez déjà fait, mais vous avez besoin de champs supplémentaires:
add_action('init', 'add_actor_taxonomy');
function add_actor_taxonomy() {
if (!is_taxonomy('actor')) {
register_taxonomy( 'rating', 'post',
array(
'hierarchical' => FALSE,
'label' => __('actor'),
'public' => TRUE,
'show_ui' => TRUE,
'query_var' => 'actor',
'rewrite' => true, // this adds the tag %actor% to WordPress
)
);
}
}
Même si la balise% actor% a été ajoutée à WordPress, cela ne fonctionnera que si vous indiquez à WordPress comment traduire la balise.
// The post_link hook allows us to translate tags for regular post objects
add_filter('post_link', 'actor_permalink', 10, 3);
// The post_type_link hook allows us to translate tags for custom post type objects
add_filter('post_type_link', 'actor_permalink', 10, 3);
function actor_permalink($permalink, $post_id, $leavename) {
// If the permalink does not contain the %actor% tag, then we don’t need to translate anything.
if (strpos($permalink, '%actor%') === FALSE) return $permalink;
// Get post
$post = get_post($post_id);
if (!$post) return $permalink;
// Get the actor terms related to the current post object.
$terms = wp_get_object_terms($post->ID, 'actor');
// Retrieve the slug value of the first actor custom taxonomy object linked to the current post.
if ( !is_wp_error($terms) && !empty($terms) && is_object($terms[0]) )
$taxonomy_slug = $terms[0]->slug;
// If no actor terms are retrieved, then replace our actor tag with the value "actor"
else
$taxonomy_slug = 'actor';
// Replace the %actor% tag with our custom taxonomy slug
return str_replace('%actor%', $taxonomy_slug, $permalink);
}
Avec une structure permalien personnalisée comme celle-ci
/%actor%/%postname%
Votre nouveau lien de publication ressemblera à ceci
http://website.com/james-franco/127-hours
Référence: http://shibashake.com/wordpress-theme/add-custom-taxonomy-tags-to-your-wordpress-permalinks