O tipo de postagem personalizada Permalink / Rewrite não funciona imediatamente

9

Bater em uma parede de tijolos com o seguinte:

Eu tenho:

  • 1 tipo de postagem personalizado chamado cpt_community
  • 1 taxonomia customizada chamada tax_community

Se eu definir 'rewrite' => trueno meu registro de CPT, os links permanentes para uma entrada deste CPT terão a forma de http://<domain>/cpt_community/test_item/e recebo um 404 ao navegar nele.

Se eu definir 'rewrite' => false, permalinks são http://<domain>/?cpt_community=test_item/, e isso funciona bem.

Então, obviamente, estou fazendo algo errado / estúpido - a questão é: o que?

[Atualizar]

  • Após cada alteração, estou liberando as regras acessando Configurações> Links permanentes (e salvando)
  • Depois de deixar tudo sozinho por uma hora, as coisas começaram a funcionar corretamente - então por que o atraso?

Código

Registro de 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' );

Registro de taxonomia personalizada

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' );
anu
fonte
11
você liberou as reescritas primeiro visitando a página de links permanentes e salvando?
Milo
@milo - yup. Curiosamente, depois de andar afastado por uma hora e, em seguida, voltando, dos permalinks bonitas 'estão trabalhando agora - eu vou atualizar a pergunta e enquadrá-lo como um 'por que o atraso'
anu
Você usa um plugin de cache? Funciona mais rápido com todos os outros plugins desativados? (Basta pegar os suspeitos do costume para fora do caminho)
Jan Fabry
@jan - nenhum plugin de cache. O problema é que não consigo reproduzir esse comportamento - isso aconteceu algumas vezes agora e desaparece depois, mas sem nenhuma ação específica (que eu possa dizer) para corrigi-lo.
anu

Respostas:

7

Use a função flush_rewrite_rules () para definir as regras de reescrita novas, mas não com o seu código no init-hook, apenas no tema ou plugin de ativação! Veja mais em meu post: http://wpengineer.com/2044/custom-post-type-and-permalink/

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

Liberar regras apenas na ativação (e desativação). Não faça isso em nenhum outro gancho.

register_activation_hook()
bueltge
fonte
4

Basta ir em Configurações> Links permanentes para exibir as regras. Nenhum código é necessário. Você não precisa atualizar a estrutura, basta abrir a página de administrador.

Jukov
fonte
mas você precisará visitar essa página sempre que ocorrer um erro. Usando o flush_rewrite_rules (); função significa que eles são liberados sem necessidade real de interação.
Alex Older