I've created a custom post type with a rewrite to use the grandparent relationship as the URL like so:
function cpt_child(){
$args = array(
//code
'rewrite' => array( 'slug' => '%grandparent%/%parent%', 'with_front' => false),
);
register_post_type( 'child', $args );
}
add_action( 'init', 'cpt_child' );
Then I update the permalink:
add_filter( 'post_type_link', 'filter_the_post_type_link', 1, 2 );
function filter_the_post_type_link( $post_link, $post ) {
switch( $post->post_type ) {
case 'child':
$post_link = get_bloginfo( 'url' );
$relationship_child = p2p_type('children_to_parents')->get_adjacent_items($post->ID);
$parent = $relationship['parent']->post_name;
$relationship_parent = p2p_type('parents_to_grandparents')->get_adjacent_items($parent['parent']->ID);
$grandparent = $relationship_parent['parent']->post_name;
$post_link .= "/{$grandparent}/";
$post_link .= "{$parent}/";
$post_link .= "{$post->post_name}";
break;
}
return $post_link;
}
This all works great, but unfortunately the rewrite rule matches regular pages as well which makes them 404.
I can prevent this by adding a custom slug, for example 'relationship': http://example.com/relationship/grandparent/parent/child
But I'd really like to use http://example.com/grandparent/parent/child
and have it not break regular pages.
Query debugging:
CPT rewrite active and CPT rewrites are working but pages break
Request:
test
Query String:
name=test
Matched Rewrite Rule:
([^/]+)(?:/([0-9]+))?/?$
Matched Rewrite Query:
name=test&page=
CPT rewrite inactive and pages work (normal)
Request:
account-information
Query String:
pagename=account-information
Matched Rewrite Rule:
(.?.+?)(?:/([0-9]+))?/?$
Matched Rewrite Query:
pagename=account-information&page=
Thanks in advance!
http://example.com/test
404's with the CPT rewrite in place.