• Good morning,

    I am looking to create a rewrite structure for a custom-built events section of my website on my development server. I’ve created four custom re-write tags:

    	add_action( 'init', 'aecm_rewrite_tags', 10, 0 );
    	function aecm_rewrite_tags() {
    		//Get global
    		global $wp_rewrite;
    		
    		//Set new values
    		$wp_rewrite->add_rewrite_tag( '%event_start_year%', '([^&/]+)', 'event_start_year=' );
    		$wp_rewrite->add_rewrite_tag( '%event_start_month%', '([^&/]+)', 'event_start_month=' );
    		$wp_rewrite->add_rewrite_tag( '%event_start_date%', '([^&/]+)', 'event_start_date=' );
    		$wp_rewrite->add_rewrite_tag( '%event_start_full%', '([^&/]+)', 'event_start_full=' );
    		
    		//Add permastrutures
    //		$wp_rewrite->add_permastruct( 'events', '/%event_start_year%/%event_start_date%/', false );
    	}

    Currently, I have the permastructure for the Custom Post Type ‘Event’ set to:
    http://localhost/wordpress/events/%event_start_year%/%event_start_month%/%postname%/

    Which works great. However, I want to change it to be structured like this:
    http://localhost/wordpress/events/%event_start_full%-%postname%/

    The rewrite rule throws a 404 when I use a hyphen between rewrite tags, but not when I use a forward slash.

    The code that defines the rewrite tags values:

    	add_filter( 'post_type_link', 'aecm_post_type_links', 1, 3 );
    	function aecm_post_type_links( $permalink, $post, $leavename ) {
    		
    		//Rewrites
    		$permalink_rewrites = array(
    			'%category%',
    			'%event_start_year%',
    			'%event_start_month%',
    			'%event_start_date%',
    			'%event_start_full%',
    			'%postname%' ? : $leavename,
    		);
    		
    		//Category first
    		$category = '';
            if ( strpos($permalink, '%category%') !== false ) :
                $cats = get_the_category( $post->id );
                if ( $cats ) :
                    usort($cats, '_usort_terms_by_ID'); // order by ID
                    $category = $cats[0]->slug;
                    if ( $parent = $cats[0]->parent ) :
                        $category = get_category_parents($parent, false, '/', true) . $category;
                    endif;
                endif;
                
                // show default category in permalinks, without having to assign it explicitly
                if ( empty($category) ) :
                    $default_category = get_category( get_option( 'default_category' ) );
                    $category = is_wp_error( $default_category ) ? '' : $default_category->slug;
                endif;
            endif;
    		
    		//Get fields
    		$event_start_year = date( 'Y', strtotime(get_field( 'event_Date-Start', $post->ID )) );
    		$event_start_month = date( 'm', strtotime(get_field( 'event_Date-Start', $post->ID )) );
    		$event_start_date = date( 'd', strtotime(get_field( 'event_Date-Start', $post->ID )) );
    		$event_start_full = date( 'Ymd', strtotime(get_field( 'event_Date-Start', $post->ID )) );
    		
    		//Define
    		$permalink_replacements = array(
    			$category,
    			$event_start_year,
    			$event_start_month,
    			$event_start_date,
    			$event_start_full,
    		);
    		
    		//Regenerate permalink
    		$permalink = user_trailingslashit( str_replace( $permalink_rewrites, $permalink_replacements, $permalink ), 'single' );
    		
    		//Return
    		return $permalink;
    	}

    Is there a way to write the permstructure to allow hyphens between rewrite tags? If I use a permastructure that has http://localhost/wordpress/events/%post_id%-%postname%/ it works fine, so I’m assuming it’s my custom rewrite tags that are the issue.

    Thanks!

Viewing 1 replies (of 1 total)
Viewing 1 replies (of 1 total)

The topic ‘Create Custom add_rewrite_tag with Hyphens’ is closed to new replies.