具有相同 slug 的自定义帖子重定向到具有相同 slug 的错误 post
Custom Posts with same slug Redirecting to wrong post with same slug
我有 2 个自定义 Post 类型 posts.The 视频 Post 和城市指南 Post
第一个 Post(视频 Post)包含 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/(城市指南是永久链接结构,是自定义 post 类型的名称)。
因此,每当我们尝试访问第一个 url 时,问题就会出现在这里,它显示第二个 url.The 的模板和内容 第二个 url 是最新的 published.I 我自己尝试通过禁用来解决Yoast Seo 插件仍然没有变化,并且刷新了我的永久链接仍然得到了相同的结果。
首先附上 Yoast SEO 片段 url post: and the Yoast SEO snippet of second url post
任何帮助将不胜感激,谢谢。
加法:
这是我的 CPT 代码。
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 指南 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 );
我的代码中有这个
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;
}
这个问题很常见,因为两个post类型的slug名称相似,所以会显示最新的那个。它现在不反映到 post 类型。我假设您在 permalink 结构中选择了 "post-name" 或 %postname%。
要解决此问题,第一个也是最简单的方法是更改其中一个 post 的 post slug。
另一种是通过重写WordPress的class函数来改变functions.php类型的post类型的permalink结构。为此,您必须查看 post 标题下方的 link。这是因为要找出特定自定义 post 类型的 post 类型的 slug。
我已经在本地安装中实现了您提供的代码。现在我有 2 个自定义的 post 类型和你的 post 两个名字 "rick owens" 中的 "rick-owens"。首先,显示与上述相同的错误。
我通过在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');
上面这段代码对我有用并经过测试,应该也对你有用。
正如我已经提到的,您应该从那个特定 post 的编辑页面知道 post url。
对于视频自定义 post 类型,post url 应该是这样的:
www.siteurl.com/rewrite/rick-owens
对于城市指南post类型,posturl应该是这样的:
www.siteurl.com/city-guide/rick-owens
如果我是正确的,相同的 link 结构也应该在您的页面中,所以我在顶部提供的代码应该可以工作。如果您与我上面提到的 link 不同,请在我提供的 functions.php 代码中根据它进行更改。例如,
如果您有视频自定义 post 类型,
www.siteurl.com/video/rick-owens
然后把functions.php代码改成
$structure = 'video/%rewrite%';
如果您有城市指南自定义 post 类型,
www.siteurl.com/city_guide/rick-owens
$structure1 = 'city_guide/%rewrite%';
see img for city-guide url check
这是另一种选择,如果在我的项目中发生与您类似的冲突,我通常会这样做。如果你没听懂,请在 post 上提到我。
希望这会奏效。
Updated Answer as from your updated process
请使用此代码将您的 post 类型更新为 Wordpress 核心功能
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' );
希望这段代码对你有用,请删除我上面提到的代码,不要忘记更新 permalink。
谢谢
NOTE: Don't forget to update you permalink once you placed the code in
functions.php
使用以下代码更新寄存器post类型代码,如果可能,使用相同的城市指南代码post类型
$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 );
在您的 Wordpress 永久链接设置中,放置自定义结构,例如 /%category%/%postname%/,然后在您的第一次面试中 post,注意到 yoast seo 的齿轮标签了吗?你可以把 /rick-owens/ 作为 Canonical URL.
我有 2 个自定义 Post 类型 posts.The 视频 Post 和城市指南 Post 第一个 Post(视频 Post)包含 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/(城市指南是永久链接结构,是自定义 post 类型的名称)。 因此,每当我们尝试访问第一个 url 时,问题就会出现在这里,它显示第二个 url.The 的模板和内容 第二个 url 是最新的 published.I 我自己尝试通过禁用来解决Yoast Seo 插件仍然没有变化,并且刷新了我的永久链接仍然得到了相同的结果。
首先附上 Yoast SEO 片段 url post:
加法:
这是我的 CPT 代码。
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 指南 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 );
我的代码中有这个
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;
}
这个问题很常见,因为两个post类型的slug名称相似,所以会显示最新的那个。它现在不反映到 post 类型。我假设您在 permalink 结构中选择了 "post-name" 或 %postname%。 要解决此问题,第一个也是最简单的方法是更改其中一个 post 的 post slug。
另一种是通过重写WordPress的class函数来改变functions.php类型的post类型的permalink结构。为此,您必须查看 post 标题下方的 link。这是因为要找出特定自定义 post 类型的 post 类型的 slug。
我已经在本地安装中实现了您提供的代码。现在我有 2 个自定义的 post 类型和你的 post 两个名字 "rick owens" 中的 "rick-owens"。首先,显示与上述相同的错误。
我通过在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');
上面这段代码对我有用并经过测试,应该也对你有用。
正如我已经提到的,您应该从那个特定 post 的编辑页面知道 post url。
对于视频自定义 post 类型,post url 应该是这样的:
www.siteurl.com/rewrite/rick-owens
对于城市指南post类型,posturl应该是这样的:
www.siteurl.com/city-guide/rick-owens
如果我是正确的,相同的 link 结构也应该在您的页面中,所以我在顶部提供的代码应该可以工作。如果您与我上面提到的 link 不同,请在我提供的 functions.php 代码中根据它进行更改。例如, 如果您有视频自定义 post 类型,
www.siteurl.com/video/rick-owens
然后把functions.php代码改成
$structure = 'video/%rewrite%';
如果您有城市指南自定义 post 类型,
www.siteurl.com/city_guide/rick-owens
$structure1 = 'city_guide/%rewrite%';
see img for city-guide url check
这是另一种选择,如果在我的项目中发生与您类似的冲突,我通常会这样做。如果你没听懂,请在 post 上提到我。
希望这会奏效。
Updated Answer as from your updated process
请使用此代码将您的 post 类型更新为 Wordpress 核心功能
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' );
希望这段代码对你有用,请删除我上面提到的代码,不要忘记更新 permalink。
谢谢
NOTE: Don't forget to update you permalink once you placed the code in functions.php
使用以下代码更新寄存器post类型代码,如果可能,使用相同的城市指南代码post类型
$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 );
在您的 Wordpress 永久链接设置中,放置自定义结构,例如 /%category%/%postname%/,然后在您的第一次面试中 post,注意到 yoast seo 的齿轮标签了吗?你可以把 /rick-owens/ 作为 Canonical URL.