Skip to content

Commit

Permalink
Allow for an empty project, category, tag, or author rewrite base. Ho…
Browse files Browse the repository at this point in the history
…wever, only one can be empty at a time to avoid conflicts. So, if more than one is empty, this is the priority:

* project
* category
* author
* tag

The lowest priority will get their defaults assigned.

This fixes a permalink issue from pre-1.0.0 where permalinks were based on a category-first structure.
  • Loading branch information
Justin Tadlock committed Nov 5, 2015
1 parent ba7d3b1 commit b89290d
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 10 deletions.
36 changes: 31 additions & 5 deletions admin/class-settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public function admin_menu() {

if ( $this->settings_page ) {

// Register setings.
// Register settings.
add_action( 'admin_init', array( $this, 'register_settings' ) );

// Add help tabs.
Expand Down Expand Up @@ -108,17 +108,43 @@ function register_settings() {
*/
function validate_settings( $settings ) {

// Text boxes that cannot be empty.
// Text boxes.
$settings['portfolio_rewrite_base'] = $settings['portfolio_rewrite_base'] ? trim( strip_tags( $settings['portfolio_rewrite_base'] ), '/' ) : 'portfolio';
$settings['project_rewrite_base'] = $settings['project_rewrite_base'] ? trim( strip_tags( $settings['project_rewrite_base'] ), '/' ) : '';
$settings['category_rewrite_base'] = $settings['category_rewrite_base'] ? trim( strip_tags( $settings['category_rewrite_base'] ), '/' ) : 'categories';
$settings['tag_rewrite_base'] = $settings['tag_rewrite_base'] ? trim( strip_tags( $settings['tag_rewrite_base'] ), '/' ) : 'tags';
$settings['author_rewrite_base'] = $settings['author_rewrite_base'] ? trim( strip_tags( $settings['author_rewrite_base'] ), '/' ) : 'authors';
$settings['category_rewrite_base'] = $settings['category_rewrite_base'] ? trim( strip_tags( $settings['category_rewrite_base'] ), '/' ) : '';
$settings['tag_rewrite_base'] = $settings['tag_rewrite_base'] ? trim( strip_tags( $settings['tag_rewrite_base'] ), '/' ) : '';
$settings['author_rewrite_base'] = $settings['author_rewrite_base'] ? trim( strip_tags( $settings['author_rewrite_base'] ), '/' ) : '';
$settings['portfolio_title'] = $settings['portfolio_title'] ? strip_tags( $settings['portfolio_title'] ) : esc_html__( 'Portfolio', 'custom-content-portfolio' );

// Kill evil scripts.
$settings['portfolio_description'] = stripslashes( wp_filter_post_kses( addslashes( $settings['portfolio_description'] ) ) );

/* === Handle Permalink Conflicts ===*/

// No project or category base, projects win.
if ( ! $settings['project_rewrite_base'] && ! $settings['category_rewrite_base'] )
$settings['category_rewrite_base'] = 'categories';

// No project or tag base, projects win.
if ( ! $settings['project_rewrite_base'] && ! $settings['tag_rewrite_base'] )
$settings['tag_rewrite_base'] = 'tags';

// No project or author base, projects win.
if ( ! $settings['project_rewrite_base'] && ! $settings['author_rewrite_base'] )
$settings['author_rewrite_base'] = 'authors';

// No category or tag base, categories win.
if ( ! $settings['category_rewrite_base'] && ! $settings['tag_rewrite_base'] )
$settings['tag_rewrite_base'] = 'tags';

// No category or author base, categories win.
if ( ! $settings['category_rewrite_base'] && ! $settings['author_rewrite_base'] )
$settings['author_rewrite_base'] = 'authors';

// No author or tag base, authors win.
if ( ! $settings['author_rewrite_base'] && ! $settings['tag_rewrite_base'] )
$settings['tag_rewrite_base'] = 'tags';

// Return the validated/sanitized settings.
return $settings;
}
Expand Down
22 changes: 17 additions & 5 deletions inc/functions-rewrite.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ function ccp_rewrite_rules() {
$project_type = ccp_get_project_post_type();
$author_slug = ccp_get_author_rewrite_slug();

add_rewrite_rule( $author_slug . '/([^/]+)/page/?([0-9]{1,})/?$', 'index.php?post_type=' . $project_type . '&author_name=$matches[1]&paged=$matches[2]', 'top' );
add_rewrite_rule( $author_slug . '/([^/]+)/?$', 'index.php?post_type=' . $project_type . '&author_name=$matches[1]', 'top' );
// Where to place the rewrite rules. If no rewrite base, put them at the bottom.
$after = ccp_get_author_rewrite_base() ? 'top' : 'bottom';

add_rewrite_rule( $author_slug . '/([^/]+)/page/?([0-9]{1,})/?$', 'index.php?post_type=' . $project_type . '&author_name=$matches[1]&paged=$matches[2]', $after );
add_rewrite_rule( $author_slug . '/([^/]+)/?$', 'index.php?post_type=' . $project_type . '&author_name=$matches[1]', $after );
}

/**
Expand All @@ -53,7 +56,10 @@ function ccp_get_project_rewrite_slug() {
* @return string
*/
function ccp_get_category_rewrite_slug() {
$slug = trailingslashit( ccp_get_portfolio_rewrite_base() ) . ccp_get_category_rewrite_base();
$portfolio_base = ccp_get_portfolio_rewrite_base();
$category_base = ccp_get_category_rewrite_base();

$slug = $category_base ? trailingslashit( $portfolio_base ) . $category_base : $portfolio_base;

return apply_filters( 'ccp_get_category_rewrite_slug', $slug );
}
Expand All @@ -66,7 +72,10 @@ function ccp_get_category_rewrite_slug() {
* @return string
*/
function ccp_get_tag_rewrite_slug() {
$slug = trailingslashit( ccp_get_portfolio_rewrite_base() ) . ccp_get_tag_rewrite_base();
$portfolio_base = ccp_get_portfolio_rewrite_base();
$tag_base = ccp_get_tag_rewrite_base();

$slug = $tag_base ? trailingslashit( $portfolio_base ) . $tag_base : $portfolio_base;

return apply_filters( 'ccp_get_tag_rewrite_slug', $slug );
}
Expand All @@ -79,7 +88,10 @@ function ccp_get_tag_rewrite_slug() {
* @return string
*/
function ccp_get_author_rewrite_slug() {
$slug = trailingslashit( ccp_get_portfolio_rewrite_base() ) . ccp_get_author_rewrite_base();
$portfolio_base = ccp_get_portfolio_rewrite_base();
$author_base = ccp_get_author_rewrite_base();

$slug = $author_base ? trailingslashit( $portfolio_base ) . $author_base : $portfolio_base;

return apply_filters( 'ccp_get_author_rewrite_slug', $slug );
}

0 comments on commit b89290d

Please sign in to comment.