2

I want to replace a custom post type slug with custom field value.

I've used the below code for that:

add_rewrite_tag( '%employeetype%', 'our-team/([^/]+)' );
add_filter( 'post_type_link', function( $url, $post ){
    if ( 'developer' === $post->post_type ) {
        $customSlug = get_post_meta( $post->ID, 'employee_type', TRUE ) ? get_post_meta( $post->ID, 'employee_type', TRUE ) : 'developers'; // can be two vales develeopers and staff
        $url = str_replace( '%employeetype%', 'our-team/'.$customSlug, $url );
    }
    return $url;
}, 10, 2 );

I also want to maintain the below pages:
mysite.com/our-team/
mysite.com/our-team/developers - this page redirects to index page
mysite.com/our-team/staff - this page redirects to index page
mysite.com/our-team/developers/abcd (achieved with above code) works fine

Can we do anything here to achieve this? Thanks.

0
0

I've fixed this issue by adding the below code:

add_rewrite_rule('our-team/developers/?$','index.php?pagename=our-team/developers', 'top');
add_rewrite_rule('our-team/support-staff/?$','index.php?pagename=our-team/support-staff', 'top');
2
  • 1
    You can actually do it with a single call to add_rewrite_rule(): add_rewrite_rule('our-team/(developers|support-staff)/?$','index.php?pagename=our-team/$matches[1]', 'top'); It will save some database space. :)
    – Sally CJ
    Mar 30 '20 at 22:33
  • 1
    Awesome :) @SallyCJ
    – chithra
    Mar 31 '20 at 17:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.