J'ai un type de message personnalisé appelé "designs" et une taxonomie enregistrée "design_category" et "design_tag".
J'essaie d'obtenir les permaliens comme suit, mais je n'ai pas beaucoup de chance. Il semble que le fait d'avoir 2 taxonommées ne cause qu'un seul problème: "design_category" ou "design_tag".
Je veux les permaliens comme ça:
un seul design: url.com/designs/design_category/single-design
une catégorie de design: url.com/designs/design_category
un tag de conception: url.com/designs/design_tag
il n'y a que quelques catégories spécifiques et peu de place pour une expansion, il n'y aura donc jamais de catégorie et de balise correspondantes.
c'est le code que je dois tout créer - juste bloqué pour faire fonctionner les balises - continue à aller à l'erreur 404 :(
function create_design() {
// Design Tags
$labels = array(
'name' => _x( 'Design Tags', 'taxonomy general name' ),
'singular_name' => _x( 'Design Tag', 'taxonomy singular name' ),
'search_items' => __( 'Search Design Tags' ),
'all_items' => __( 'All Design Tags' ),
'parent_item' => __( 'Parent Design Tags' ),
'parent_item_colon' => __( 'Parent Design Tags:' ),
'edit_item' => __( 'Edit Design Tag' ),
'update_item' => __( 'Update Design Tag' ),
'add_new_item' => __( 'Add New Design Tag' ),
'new_item_name' => __( 'New Design Tag Name' ),
'menu_name' => __( 'Design Tags' ),
);
register_taxonomy('design_tag',array('design'), array(
'hierarchical' => false,
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'designs' ),
));
// Design Categories
$labels = array(
'name' => _x( 'Design Categories', 'taxonomy general name' ),
'singular_name' => _x( 'Design Category', 'taxonomy singular name' ),
'search_items' => __( 'Search Design Categories' ),
'all_items' => __( 'All Design Categories' ),
'parent_item' => __( 'Parent Design Category' ),
'parent_item_colon' => __( 'Parent Design Category:' ),
'edit_item' => __( 'Edit Design Category' ),
'update_item' => __( 'Update Design Category' ),
'add_new_item' => __( 'Add New Design Category' ),
'new_item_name' => __( 'New Design Category Name' ),
'menu_name' => __( 'Design Categories' ),
);
register_taxonomy('design_category',array('design'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'designs' ),
));
// Create post type
$labels = array(
'name' => _x( 'Designs', 'design' ),
'singular_name' => _x( 'Design', 'design' ),
'add_new' => _x( 'Add New', 'design' ),
'add_new_item' => _x( 'Add New Design', 'design' ),
'edit_item' => _x( 'Edit Design', 'design' ),
'new_item' => _x( 'New Design', 'design' ),
'view_item' => _x( 'View Design', 'design' ),
'search_items' => _x( 'Search Designs', 'design' ),
'all_items' => __( 'All Designs', 'design' ),
'not_found' => _x( 'No Designs found', 'design' ),
'not_found_in_trash' => _x( 'No Designs found in Trash', 'design' ),
'parent_item_colon' => _x( 'Parent Design:', 'design' ),
'menu_name' => _x( 'Designs', 'design' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'trackbacks', 'revisions' ),
'taxonomies' => array( 'design_categories', 'design_tags' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => 'designs',
'query_var' => true,
'can_export' => true,
'rewrite' => array(
'slug' => 'designs/%design_category%' ),
'capability_type' => 'post'
);
register_post_type( 'design', $args );
}
add_filter('post_type_link', 'design_term_permalink', 1, 3);
function design_term_permalink($post_link, $id = 0, $leavename = FALSE )
{
if ( strpos('%design_category%', $post_link) === 'FALSE' ) {
return $post_link;
}
$post = get_post($id);
if ( !is_object($post) || $post->post_type != 'design' ) {
return $post_link;
}
$terms = wp_get_object_terms($post->ID, 'design_category');
if ( !$terms ) {
return str_replace('designs/%design_category%/', '', $post_link);
}
return str_replace('%design_category%', $terms[0]->slug, $post_link);}
J'ai répondu à une question similaire mais avec les détails de la façon de le faire vous-même:
Ajout de catégories à un type de message personnalisé en permalien