skip to Main Content

I have 2 Custom Post type posts.The video Post and City-guide Post
The first Post(Video Post) contains the url: 104.130.239.132/rick-owens/ and the second Post(City-Guide Post) conatins url:http://104.130.239.132/city-guide/rick-owens/ (city-guide is the permalink structured which is the name of custom post type).
SO the issue arrise here whenever we try to access the first url it displays the template and content of 2nd url.The 2nd url is latest published.I tried from myself to solve by disabling the Yoast Seo Plugin still no change and also done my permalink refreshed still got same results.

Attaching the Yoast SEO snippet for first url post: enter image description here and the Yoast SEO snippet of second url post enter image description here
Any Help will be appreciated,Thanks.

Addition:

Here are my CPT codes.

1.Video Posts :

$labels = array(
'name'                => _x( 'Videos', 'Post Type General Name', 'roots' ),
'singular_name'       => _x( 'Video', 'Post Type Singular Name', 'roots' ),
'menu_name'           => __( 'Video Posts', 'roots' ),
'parent_item_colon'   => __( 'Parent Video:', 'roots' ),
'all_items'           => __( 'All Videos', 'roots' ),
'view_item'           => __( 'View Video', 'roots' ),
'add_new_item'        => __( 'Add New Video', 'roots' ),
'add_new'             => __( 'Add New', 'roots' ),
'edit_item'           => __( 'Edit Video', 'roots' ),
'update_item'         => __( 'Update Video', 'roots' ),
'search_items'        => __( 'Search Video', 'roots' ),
'not_found'           => __( 'Not found', 'roots' ),
'not_found_in_trash'  => __( 'Not found in Trash', 'roots' ),
);
$rewrite = array(
'slug'                => 'rewrite',
'with_front'          => true,
'pages'               => true,
'feeds'               => true,
);
$args = array(
'label'               => __( 'video', 'roots' ),
'description'         => __( 'Videos Post Type', 'roots' ),
'labels'              => $labels,
'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'trackbacks', 'revisions', 'custom-fields', ),
'taxonomies'          => array( 'category', 'post_tag' ),
'hierarchical'        => false,
'public'              => true,
'show_ui'             => true,
'show_in_menu'        => true,
'show_in_nav_menus'   => true,
'show_in_admin_bar'   => true,
'menu_position'       => 5,
'can_export'          => true,
'has_archive'         => true,
'exclude_from_search' => false,
'publicly_queryable'  => true,
'rewrite'       => $rewrite,
'capability_type'     => 'post',
'yarpp_support'    => TRUE
);
register_post_type( 'video', $args );

2.City Guide Posts :

function register_post_types(){
register_post_type( 'city-guide', [
'has_archive' => TRUE,
'hierarchical' => TRUE,
'labels' => [
'name' => 'City Guide'
],
'public' => TRUE,
'supports' => ['editor', 'page-attributes', 'revisions', 'thumbnail', 'title','custom-fields','excerpt'],
'taxonomies' => array('post_tag')
] );
add_image_size( 'ipad-city-thumb', 650, 650, TRUE );
}
add_action( 'init', __NAMESPACE__.'register_post_types', 20 );

I have this then in my code

remove /rewrite/ slug from custom permalinks, to allow domain/slug for all post types
public function post_link_rewrite( $post_link, $post, $leavename ){
      $post_link = str_replace( '/rewrite/', '/', $post_link );

      return $post_link;
    }

3

Answers


  1. This issue is really common, since the slug name of the two post type is similar, the one which is latest one will be displayed. It doesn’t reflect to the post type now. I assume you have chosen “post-name” or %postname% in a permalink structure.
    To solve the issue, the first and easiest way is to change the post slug of one of the posts.

    Another is to change the permalink structure of the post type from the functions.php through rewrite class functions of WordPress. To do so, you have to look at the link below the post title. This is because to find out the slug of the post type of the particular custom post type.

    I have implemented your provided code in my local installation. Now i have 2 custom post type as of yours and the post in both names “rick owens” which slug will be “rick-owens”. Firstly, the same error is displayed as of have mentioned.

    I solved this problem by adding this function in functions.php

    function add_rewrite_rules_custom_post(){
    
    global $wp_rewrite;
    
        $structure   = 'rewrite/%rewrite%';
        $structure1  = 'city-guide/%city-guide%';
    
        $wp_rewrite->add_permastruct('%rewrite%', $structure, false);
        $wp_rewrite->add_permastruct('%city-guide%', $structure1, false);
    }
    add_action('init', 'add_rewrite_rules_custom_post');
    

    Above this code worked for me and tested and should work for you also.

    As i have already mentioned, you should know the post url from the edit page of that particular post.

    For video custom post type, the post url should be like this:

    http://www.siteurl.com/rewrite/rick-owens

    For city guide post type, the post url should be like this:

    http://www.siteurl.com/city-guide/rick-owens

    If I am correct, the same link structure should be in your page too, so the code should work which I provided at the top. If you have different than that i have mentioned link above, then change according to it in the functions.php code that i have provided. For example,
    If you have for video custom post type,

    http://www.siteurl.com/video/rick-owens

    Then change the functions.php code to

    $structure   = 'video/%rewrite%';
    

    see img for video url check

    If you have for city guide custom post type,

    http://www.siteurl.com/city_guide/rick-owens

    $structure1   = 'city_guide/%rewrite%';
    

    see img for city-guide url check

    This is the another option, which i usually do if any conflict occur as similar as yours in my project. If you didn’t got it please mention me on this post.

    Hope this will work.

    Updated Answer as from your updated process

    Please use this code for updating your post type to the WordPress Core functionality

    function update_parse_request( $query ) {
    
        if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
            return;
        }
    
        if ( ! empty( $query->query['name'] ) ) {
            $query->set( 'post_type', array( 'post', 'page', 'video', 'rewrite' ) );
        }
    }
    add_action( 'pre_get_posts', 'update_parse_request' );
    

    Hope this code will work for you and please remove the code as i mention earlier above and dont forget to update the permalink.

    Thank You

    NOTE: Don’t forget to update you permalink once you placed the code in
    functions.php

    Login or Signup to reply.
  2. Update register post type code with below code,and if possible use same code for city guide post type

    $labels = array(
    'name'                => _x( 'Videos', 'Post Type General Name', 'roots' ),
    'singular_name'       => _x( 'Video', 'Post Type Singular Name', 'roots' ),
    'menu_name'           => __( 'Video Posts', 'roots' ),
    'parent_item_colon'   => __( 'Parent Video:', 'roots' ),
    'all_items'           => __( 'All Videos', 'roots' ),
    'view_item'           => __( 'View Video', 'roots' ),
    'add_new_item'        => __( 'Add New Video', 'roots' ),
    'add_new'             => __( 'Add New', 'roots' ),
    'edit_item'           => __( 'Edit Video', 'roots' ),
    'update_item'         => __( 'Update Video', 'roots' ),
    'search_items'        => __( 'Search Video', 'roots' ),
    'not_found'           => __( 'Not found', 'roots' ),
    'not_found_in_trash'  => __( 'Not found in Trash', 'roots' ),
    );
    
    $args = array(
    'labels'              => $labels,
    'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments',         'trackbacks', 'revisions', 'custom-fields', ),
    'taxonomies'          => array( 'category', 'post_tag' ),
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 5,
    'can_export'          => true,
    'has_archive'         => true,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'query_var' => true,
    'rewrite'       => true,
    'capability_type'     => 'post',
    'yarpp_support'    => TRUE
    );
    register_post_type( 'video', $args );
    
    Login or Signup to reply.
  3. in your WordPress permalinks setting, put custom structure like /%category%/%postname%/, then in your first interview post, notice the yoast seo’s gear tab? you can put /rick-owens/ as Canonical URL.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search