Opened 13 years ago
Closed 13 years ago
#21093 closed defect (bug) (duplicate)
wp_unique_term_slug() & Custom Post Type / Page Slugs Comparison
| Reported by: |
|
Owned by: | |
|---|---|---|---|
| Milestone: | Priority: | normal | |
| Severity: | normal | Version: | 3.4 |
| Component: | Taxonomy | Keywords: | has-patch |
| Focuses: | Cc: |
Description
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%.
Attachments (1)
Change History (3)
#2
@
13 years ago
- Keywords dev-feedback 2nd-opinion removed
- Milestone Awaiting Review deleted
- Resolution set to duplicate
- Status changed from new to closed
- Version set to 3.4
You went a little around the block at first with the description so I didn't know what you were getting at until the patch. I'm going to close this as a dupe of #20783. I amended the existing patch there to incorporate your suggestion of the *_is_bad_* filters to better align with wp_unique_post_slug(). I corrected the incorrect logic in your patch where the first wp_unique_is_bad_term_slug filter was concerned (and changed it to be wp_unique_term_slug_is_bad_hierarchical_slug as is the case for the post version). That ticket already proposed the wp_unique_term_slug filter, and also adds a pre_wp_unique_term_slug.
Feel free to continue discussion there.
First pass