php – 具有相同slug的自定义帖子使用相同的slug重定向到错误的帖子

前端之家收集整理的这篇文章主要介绍了php – 具有相同slug的自定义帖子使用相同的slug重定向到错误的帖子前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2个自定义帖子类型的帖子.视频帖子和城市指南帖子
第一个帖子(Video Post)包含url: 104.130.239.132/rick-owens/和第二个Post(City-Guide Post)conatins url: http://104.130.239.132/city-guide/rick-owens/(city-guide是永久链接结构,它是自定义帖子类型的名称).
因此,每当我们尝试访问第一个网址时,问题就出现了,它显示了第二个网址的模板和内容.第二个网址是最新发布的.我试图通过禁用Yoast SEO插件解决仍然没有变化,也完成了我的永久链接刷新仍然得到相同的结果.

附加Yoast SEO片段为第一个url帖子:和Yoast SEO片段的第二个url帖子
任何帮助将不胜感激,谢谢.

加成:

这是我的CPT代码.

1.视频帖子:

  1. $labels = array(
  2. 'name' => _x( 'Videos','Post Type General Name','roots' ),'singular_name' => _x( 'Video','Post Type Singular Name','menu_name' => __( 'Video Posts','parent_item_colon' => __( 'Parent Video:','all_items' => __( 'All Videos','view_item' => __( 'View Video','add_new_item' => __( 'Add New Video','add_new' => __( 'Add New','edit_item' => __( 'Edit Video','update_item' => __( 'Update Video','search_items' => __( 'Search Video','not_found' => __( 'Not found','not_found_in_trash' => __( 'Not found in Trash',);
  3. $rewrite = array(
  4. 'slug' => 'rewrite','with_front' => true,'pages' => true,'Feeds' => true,);
  5. $args = array(
  6. 'label' => __( 'video','description' => __( 'Videos Post Type','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
  7. );
  8. register_post_type( 'video',$args );

2.城市指南帖子:

  1. function register_post_types(){
  2. register_post_type( 'city-guide',[
  3. 'has_archive' => TRUE,'hierarchical' => TRUE,'labels' => [
  4. 'name' => 'City Guide'
  5. ],'public' => TRUE,'supports' => ['editor','page-attributes','title','excerpt'],'taxonomies' => array('post_tag')
  6. ] );
  7. add_image_size( 'ipad-city-thumb',650,TRUE );
  8. }
  9. add_action( 'init',__NAMESPACE__.'\register_post_types',20 );

我在我的代码中有这个

  1. remove /rewrite/ slug from custom permalinks,to allow domain/slug for all post types
  2. public function post_link_rewrite( $post_link,$post,$leavename ){
  3. $post_link = str_replace( '/rewrite/','/',$post_link );
  4.  
  5. return $post_link;
  6. }
这个问题非常普遍,因为两个帖子类型的slug名称相似,将显示最新的一个.它现在没有反映到帖子类型.我假设你在永久链接结构中选择了“post-name”或%postname%.
解决这个问题,第一个也是最简单的方法是更改​​其中一个帖子的帖子.

另一种方法是通过wordpress的重写类函数从functions.PHP更改post类型的永久链接结构.为此,您必须查看帖子标题下方的链接.这是因为要找出特定自定义帖子类型的帖子类型的slu ..

我在本地安装中实现了您提供的代码.现在我有2个自定义的帖子类型和你的名字“rick owens”这个帖子将是“rick-owens”.首先,如上所述,显示相同的错误.

我通过在functions.PHP添加函数解决了这个问题

  1. function add_rewrite_rules_custom_post(){
  2.  
  3. global $wp_rewrite;
  4.  
  5. $structure = 'rewrite/%rewrite%';
  6. $structure1 = 'city-guide/%city-guide%';
  7.  
  8. $wp_rewrite->add_permastruct('%rewrite%',$structure,false);
  9. $wp_rewrite->add_permastruct('%city-guide%',$structure1,false);
  10. }
  11. add_action('init','add_rewrite_rules_custom_post');

以上代码适用于我并经过测试,也应该适合您.

正如我已经提到的,您应该知道该特定帖子的编辑页面中的帖子网址.

对于视频自定义帖子类型,帖子网址应如下所示:

www.siteurl.com/rewrite/rick-owens

对于城市指南帖子类型,帖子网址应如下所示:

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

如果我是正确的,同样的链接结构也应该在你的页面中,所以代码应该在我提供的顶部.如果你有不同于我上面提到的链接,那么在我提供的functions.PHP代码中根据它进行更改.例如,
如果你有视频自定义帖子类型,

www.siteurl.com/video/rick-owens

然后将functions.PHP代码更改为

  1. $structure = 'video/%rewrite%';

see img for video url check

如果您有城市指南自定义帖子类型,

www.siteurl.com/city_guide/rick-owens

  1. $structure1 = 'city_guide/%rewrite%';

see img for city-guide url check

这是另一个选项,如果在我的项目中发生与您的冲突类似的冲突,我通常会这样做.如果你没有得到它,请在这篇文章中提及我.

希望这会奏效.

Updated Answer as from your updated process

请使用此代码将您的帖子类型更新为wordpress Core功能

  1. function update_parse_request( $query ) {
  2.  
  3. if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
  4. return;
  5. }
  6.  
  7. if ( ! empty( $query->query['name'] ) ) {
  8. $query->set( 'post_type',array( 'post','page','video','rewrite' ) );
  9. }
  10. }
  11. add_action( 'pre_get_posts','update_parse_request' );

希望这段代码对您有用,请删除上面提到的代码,不要忘记更新永久链接.

谢谢

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

猜你在找的PHP相关文章