﻿id,summary,reporter,owner,description,type,status,priority,milestone,component,version,severity,resolution,keywords,cc
21093,wp_unique_term_slug() & Custom Post Type / Page Slugs Comparison,wpsmith,,"Let's consider pages and a custom taxonomy registered as follows:

{{{
$labels = array(
    'name' => _x( 'Worksheets', 'taxonomy general name' ),
    'singular_name' => _x( 'Worksheet', 'taxonomy singular name' ),
    'search_items' =>  __( 'Search Worksheets' ),
    'all_items' => __( 'All Worksheets' ),
    'parent_item' => __( 'Parent Worksheet' ),
    'parent_item_colon' => __( 'Parent Worksheet:' ),
    'edit_item' => __( 'Edit Worksheet' ), 
    'update_item' => __( 'Update Worksheet' ),
    'add_new_item' => __( 'Add New Worksheet' ),
    'new_item_name' => __( 'New Worksheet Name' ),
    'menu_name' => __( 'Worksheet' ),
  ); 	

register_taxonomy(
    'k12_worksheet_type',
    array( 'k12_worksheets' ),
    array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => '', 'with_front' => false, 'hierarchical' => true, ),
    )
);
}}}

Now page slugs can be filtered with wp_unique_post_slug_is_bad_hierarchical_slug (and non-hierarchical custom post types with wp_unique_post_slug_is_bad_flat_slug). For example:

{{{
add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', 'k12_is_bad_slug', 10, 2 );
add_filter( 'wp_unique_post_slug_is_bad_flat_slug', 'k12_is_bad_slug', 10, 2 );
/*
 * Checks Custom Taxonomy (k12_worksheet_type) for slug conflicts
 *
 * @param boolean $is_bad_slug False as default
 * @param string $slug Slug for ""post"" of whatever post type
 * @return boolean $is_bad_slug True if bad slug, False if good slug
 */
function k12_is_bad_slug( $is_bad_slug, $slug ) {
   if ( get_terms( 'k12_worksheet_type', array( 'hide_empty' => false, 'slug' => $slug ) ) || 'worksheet' == $slug || 'worksheets' == $slug )
      return true;
   return $is_bad_slug;
}
}}}

However, if a term is created, there is no filter to check the DB for page slugs (etc.). wp_unique_term_slug() ""will make slug unique, if it isn't already."" So, it would be a good add to do likewise (wp_unique_post_slug_is_bad_hierarchical_slug & wp_unique_post_slug_is_bad_flat_slug).

The obvious impact is that it will prevent possible conflicts and reduce troubleshooting issues. For example, I have a page called Worksheets (http://domain.com/worksheets/), and then have a term from k12_worksheet_type called Worksheets (http://domain.com/worksheets/), the slugs of both are the same with the permalink %post-name%.",defect (bug),closed,normal,,Taxonomy,3.4,normal,duplicate,has-patch,
