I’m developing a car site that has showrooms. Each showroom needs it’s own custom URL based on it’s location. The location (City and County/State) is already inserted as two custom fields. So for example, if it’s “Showroom A”, located in Liverpool, Merseyside, it’s URL would be the following:-
http://www.domain.com/location/merseyside/liverpool/showroom-a/
I have a custom post type of “Showroom”, that has it’s rewrite rules set to false (though it was previously set to true earlier in the test). However when I create the post in question, there’s an issue. The permalink is given as everything BAR the name of the showroom (i.e. http://www.domain.com/location/merseyside/liverpool/). Visting this URL causes a 404 error, and even adding “showroom-a” (for example) to the end of the code (http://www.domain.com/location/merseyside/liverpool/showroom-a/), also causes a 404 error. Here is my code.
function add_rewrite_rules()
{
// Register custom rewrite rules
global $wp_rewrite;
$wp_rewrite->add_rewrite_tag('%showroom%', '([^/]+)', 'showroom=');
$wp_rewrite->add_rewrite_tag('%post_custom_data%', '([^/]+)', 'post_custom_data=');
$wp_rewrite->add_permastruct('showroom', 'location/%post_custom_data%', false);
}
function permalinks($permalink, $post, $leavename)
{
$no_data = 'no-data';
$post_id = $post->ID;
if($post->post_type != 'showroom' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) {
return $permalink;
}
$state = sanitize_title_with_dashes(get_post_meta($post_id, 'state', true));
$city = sanitize_title_with_dashes(get_post_meta($post_id, 'city', true));
$data = $state . "/" . $city;
if (!$data) {
$data = $no_data;
}
$permalink = str_replace('%post_custom_data%', $data, $permalink);
return $permalink;
}
add_action('init', 'add_rewrite_rules');
add_filter('post_type_link', 'permalinks', 10, 3);
Any ideas or help would be appreciated 🙂
I managed to fix this.
Basically I changed the permastruct to this:
I then grabbed state & city as two separate variables, replacing it in the permalink structure using these lines:
With
$state
&$city
grabbed usingget_post_meta
from the post.