Loại bài đăng tùy chỉnh Permalink / Rewrite không hoạt động ngay lập tức


9

Đánh một bức tường gạch như sau:

Tôi có:

  • 1 loại bài tùy chỉnh được gọi là cpt_community
  • 1 phân loại tùy chỉnh được gọi là tax_community

Nếu tôi đặt 'rewrite' => truetrong đăng ký CPT của mình, thì permalinks cho một mục nhập cho CPT này có dạng http://<domain>/cpt_community/test_item/và tôi nhận được 404 khi duyệt đến nó.

Nếu tôi đặt 'rewrite' => false, thì permalinks là http://<domain>/?cpt_community=test_item/, và điều này hoạt động tốt.

Vì vậy, rõ ràng tôi đang làm điều gì đó sai / ngu ngốc - câu hỏi là, cái gì?

[Cập nhật]

  • Sau mỗi thay đổi, tôi xóa quy tắc bằng cách đi tới Cài đặt> Permalinks (và lưu)
  • Sau khi để mọi thứ một mình trong một giờ, mọi thứ đã bắt đầu hoạt động chính xác - vậy tại sao lại trì hoãn?

Đăng ký 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' );

Đăng ký phân loại tùy chỉnh

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
bạn đã viết lại trước tiên bằng cách truy cập trang permalinks và lưu lại?
Milo

@milo - yup. Thật thú vị, sau khi bỏ đi một giờ và sau đó quay trở lại, 'permalinks' hiện đang hoạt động - Tôi sẽ cập nhật câu hỏi và đặt câu hỏi là 'tại sao lại trì hoãn'
anu

Bạn có sử dụng plugin lưu trữ không? Nó hoạt động nhanh hơn với tất cả các plugin khác bị vô hiệu hóa? (Chỉ cần đưa các nghi phạm thông thường ra khỏi đường đi)
Jan Fabry

@jan - không có plugin lưu trữ. Vấn đề là tôi không thể tái tạo hành vi này - nó đã xảy ra một vài lần và biến mất sau đó nhưng không có hành động cụ thể (mà tôi có thể nói) để thực sự khắc phục nó.
anu

Câu trả lời:


7

Sử dụng hàm flush_rewrite_rules () để đặt quy tắc viết lại mới, nhưng không phải với mã của bạn trên init-hook, chỉ trên plugin kích hoạt hoặc chủ đề! Xem thêm trong bài viết của tôi: http://wpengineer.com/2044/custom-post-type-and-permalink/

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

Quy tắc tuôn ra chỉ khi kích hoạt (và hủy kích hoạt). Đừng làm điều đó trên bất kỳ hook nào khác.

register_activation_hook()

4

Chỉ cần truy cập Cài đặt> Permalinks để flash các quy tắc. Không có mã là cần thiết. Bạn không cần cập nhật cấu trúc, chỉ cần mở trang quản trị đó thực hiện công việc


nhưng sau đó bạn phải truy cập trang đó mỗi khi xảy ra lỗi. Bằng cách sử dụng flush_rewrite_rules (); chức năng có nghĩa là họ bị xóa mà không có nhu cầu tương tác thực sự.
Alex Cũ hơn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.