Add term slug in URL of custom post type details page

I have created a custom post type called "movies" and I have added custom taxonomy "Available for "

I have created a custom post type called "movies" and I have added custom taxonomy "Available for " and it contains two terms

  1. Rent
  2. sales.

Current movie post details page URL

movies/avengers-endgame/

I want URL Like

movies/sales/avengers-endgame/
movies/rent/avengers-endgame/
movies/{%selected term%}avengers-endgame/

Anyone, please suggest a possible solution to fix the above issue?

Thanks

I have created a custom post type called "movies" and I have added custom taxonomy "Available for " and it contains two terms

  1. Rent
  2. sales.

Current movie post details page URL

movies/avengers-endgame/

I want URL Like

movies/sales/avengers-endgame/
movies/rent/avengers-endgame/
movies/{%selected term%}avengers-endgame/

Anyone, please suggest a possible solution to fix the above issue?

Thanks

Share Improve this question asked Jun 21, 2019 at 7:06 RigalRigal 1031 silver badge3 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

You need to update below line at where you have register a custom post type using register_post_type function.

'rewrite' => array('slug' => 'movies/%cat%')

To change permalink dynamically of post type you have to add below code in functions.php file :

function change_link( $post_link, $id = 0 ) {
    $post = get_post( $id );
    if( $post->post_type == 'movies' ) 
    {
       if ( is_object( $post ) ) {
          # assume that 'available-for' is slug of your taxonomy 
          $terms = wp_get_object_terms( $post->ID, array('available-for') );
          if ( $terms ) {
             return str_replace( '%cat%', $terms[0]->slug, $post_link );
         }
      }
    }
    return   $post_link ;
}
add_filter( 'post_type_link', 'change_link', 1, 3 );

//load the template on the new generated URL otherwise you will get 404's the page



   function generated_rewrite_rules() {
       add_rewrite_rule(
           '^movies/(.*)/(.*)/?$',
           'index.php?post_type=movies&name=$matches[2]',
           'top'
       );
    }
    add_action( 'init', 'generated_rewrite_rules' ); 
  • domain/movies/{%selected term%}/avengers-endgame/

To use Term first, you have change to this.

'rewrite' => array('slug' => '%cat%/movies')

function change_link( $post_link, $id = 0 ) {
    $post = get_post( $id );
    if( $post->post_type == 'movies' ) 
    {
       if ( is_object( $post ) ) {
          # assume that 'available-for' is slug of your taxonomy 
          $terms = wp_get_object_terms( $post->ID, array('available-for') );
          if ( $terms ) {
             return str_replace( '%cat%', $terms[0]->slug, $post_link );
         }
      }
    }
    return   $post_link ;
}
add_filter( 'post_type_link', 'change_link', 1, 3 );

function movie_cpt_generating_rule($wp_rewrite) {
    $rules = array();
    $terms = get_terms( array(
        'taxonomy' => 'available-for',
        'hide_empty' => false,
    ) );

$post_type = 'movies';
foreach ($terms as $term) {    

    $rules[ $term->slug .'/movies/([^/]*)$'] = 'index.php?post_type=' . $post_type. '&movies=$matches[1]&name=$matches[1]';

}
// merge with global rules
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'movie_cpt_generating_rule');

After that, you need to flush rewrites permalinks, goto the wp-admin > Settings > permalinks. just update permalink setting using "Save Changes" button.

it'll return urls like below :

  • domain/{%selected term%}/movies/avengers-endgame/

Thank you!

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745382037a4625272.html

相关推荐

  • Add term slug in URL of custom post type details page

    I have created a custom post type called "movies" and I have added custom taxonomy "Available for "

    5小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信