自定义帖子类型固定链接/重写无法立即生效


9

用以下方法打砖墙:

我有:

  • 1个自定义帖子类型称为 cpt_community
  • 1个自定义分类法 tax_community

如果我'rewrite' => true在CPT注册中进行了设置,则此CPT条目的永久链接为形式http://<domain>/cpt_community/test_item/,并且浏览至此时会得到404。

如果设置了 'rewrite' => false,则永久链接为http://<domain>/?cpt_community=test_item/,并且效果很好。

所以,我显然做错了/愚蠢的-问题是,什么?

[更新]

  • 每次更改后,我都会通过转到“设置”>“永久链接”(并保存)来刷新规则
  • 将所有内容搁置一个小时后,一切都开始正常工作-那么为什么要延迟呢?

CPT注册

function community_post_type() {
  $labels = array('name'  => 'Community');

   $args = array(
      'labels' => $labels,
      'public' => true,
      'publicly_queryable' => true,
      'show_ui' => true,
      'show_in_menu' => true,
      'query_var' => true,
      'rewrite' => false,
      'capability_type' => 'post',
      'has_archive' => true,
      'hierarchical' => false,
      'menu_position' => null,
      'has_archive' => true,
      'supports' => array('title','editor','excerpt','custom-fields','comments','revisions','thumbnail','author','page-attributes')
   ); 

  register_post_type('cpt_community', $args);
}  
add_action( 'init', 'community_post_type' );

海关分类注册

function community_tax_type() {
  register_taxonomy(
    'tax_community',
    'cpt_community',
     array( 'hierarchical' => false,
       'label' => 'Community Content Type',
       'show_ui' => true,'query_var' => true,
       'rewrite' => true,
       'singular_label' => 'Community Content Type',
       'capabilities' => array('assign_terms' => 'edit_community_tags')
       )
   );
   # allow roles to add community taxonomy tags to a community CPT
   $roles = array("subscriber","contributor","author","editor","administrator");

   foreach ($roles as $role_name) {
     $role = get_role($role_name);
     $role->add_cap("edit_community_tags");
   }   
}
add_action( 'init', 'community_tax_type' );

1
您已经通过访问“永久链接”页面并保存保存了刷新的重写内容?
米洛

@milo-是的 有趣的是,走路走了一个小时,然后回来后,在“漂亮固定链接”现在工作-我会更新的问题和帧它作为一个“为何迟迟”
ANU

您是否使用缓存插件?在禁用所有其他插件的情况下,其运行速度更快吗?(只是避开通常的嫌疑人)
Jan Fabry

@jan-没有缓存插件。问题是我无法重现此行为-现在已经发生了几次,此后又消失了,但是没有具体的行动(我可以告诉我)来实际修复它。
阿努

Answers:


7

使用函数flush_rewrite_rules()设置新的重写规则,但不要将代码与init-hook一起使用,仅在激活插件或主题上使用!在我的文章中查看更多信息:http : //wpengineer.com/2044/custom-post-type-and-permalink/

global $wp_rewrite;
$wp_rewrite->flush_rules();

在激活(和停用)时刷新规则。不要在其他任何钩子上执行此操作。

register_activation_hook()

4

只需转到“设置”>“永久链接”即可刷新规则。不需要任何代码。您无需更新结构,只需打开该管理页面即可完成工作


但是每次发生错误时,您都必须访问该页面。通过使用flush_rewrite_rules(); 功能意味着无需进行交互就可以冲洗他们。
Alex Older
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.