WordPress Ignorando meus modelos personalizados de tipo de postagem?

O WordPress faz 404ing todas as minhas postagens do tipo de postagem personalizada. Eu perdi um passo aqui?

Estou usando o seguinte para configurar meu CPT:

function custom_post_types() { register_post_type( 'creativework', array( 'labels' => array( 'name' => _x('Works', 'post type general name'), 'singular_name' => _x('Work', 'post type singular name'), 'add_new' => _x('Add New', 'Work'), 'add_new_item' => __('Add New Work'), 'edit_item' => __('Edit Work'), 'new_item' => __('New Work'), 'all_items' => __('All Works'), 'view_item' => __('View Work'), 'search_items' => __('Search Works'), 'not_found' => __('No Works found'), 'not_found_in_trash' => __('No Works found in Trash'), 'parent_item_colon' => '', 'menu_name' => __('Works') ), 'public' => true, 'menu_position' => 5, //'rewrite' => array('slug' => 'work'), 'supports' => array('title', 'editor', 'thumbnail'), 'has_archive' => 'true' ) ); } add_action( 'init', 'custom_post_types' ); 

Eu originalmente tinha um título de destaque no tipo ( creative_work ), reescrevendo a slug para ser apenas “trabalho”, mas eu não tinha idéia de qual permutação o WordPress usaria para encontrar o modelo: eu tentei nomes de arquivos como single-creative_work.php , single-creativework.php , single-work.php , tudo sob themes/roots/ (Eu estava usando Roots como um tema de linha de base), com os conteúdos:

  

Mas themes/roots/templates/content-work.php nunca foram exibidos. Em vez disso, parecia que themes/roots/page.php estavam sendo atendidos? Quando eu editei manualmente page.php para get_template_part('templates/content', 'work') como um teste, aparentemente usou o modelo que queria, mas depois tinha o ID do post ou algo errado onde estava exibindo a página inicial de QUALQUER COISA sob website.com/creativework/ .

Na tentativa de eliminar todos os conflitos possíveis, desativou Roots em favor de Twentythirteen e desativou todos os plugins, exceto um, o que escrevi para configurar o CPT (código na parte superior). Agora, sempre que acertar website.com/creativework/ ou website.com/creativework/post-title (seguindo o permalink de “View Work” no editor de postagem, ou nos resultados da pesquisa), recebo um 404 em vez da página inicial, apesar single-creativework.php archive-creativework.php e archive-creativework.php existente sob themes/twentythirteen .

EDIT: website.com/?creativework=post-title , no entanto, funciona.

Estou totalmente confuso com tudo isso. Qual é a maneira correta e infalível de configurar um modelo de tipo de postagem personalizado, passo a passo? O ideal é que eu queira saber como fazer isso em Roots, mas, por enquanto, vou me conformar com o modo de fazer isso funcionando.

Solutions Collecting From Web of "WordPress Ignorando meus modelos personalizados de tipo de postagem?"

Consegui. Eu tentei usar flush_rewrite_rules() na ativação / desativação do plugin, assim:

 function creativeworks_activate() { // register taxonomies/post types here flush_rewrite_rules(); } function creativeworks_deactivate() { flush_rewrite_rules(); } register_activation_hook( __FILE__, 'creativeworks_activate' ); register_deactivation_hook( __FILE__, 'creativeworks_deactivate' ); 

… mas isso não pareceu fazer nada. No entanto, quando eu alterei arbitrariamente as opções de permalink de todo o site e as salvei, as regras de reescrita foram lavadas com sucesso e meus modelos personalizados de tipo de publicação começaram a funcionar novamente.

Thonks para Milo por me apontar na direção certa.

Você tem um erro nos argumentos do register_post_type que pode estar causando problemas no frontend. Este argumento:

  'has_archive' => 'true' 

Deveria estar:

  'has_archive' => true 

O nome do arquivo correto para o modelo único de seu tipo de postagem personalizado (creative_work) é single-creative_work.php e deve estar em sua pasta de temas . Por exemplo, se o seu tema é chamado “my_theme”, o arquivo single-creative_work.php deve estar em wp-content/themes/my_theme/single-creative_work.php . Você também pode include arquivos de modelo de diferentes locais usando a function template_include () .

A estrutura de pastas em que você está falando não é usual em WordPress ( roots/lib/ , roots/templates/ , etc.). Essas pastas são de um plugin?

Eu também uso raízes e tenho uma pequena solução (não muito bonita, mas para mim isso mantém as coisas organizadas). Na raiz do diretório do modelo, existe um single.php . Lá você pode colocar:

 if(is_singular('creativework')){ get_template_part('templates/creativework', 'header'); get_template_part('templates/creativework', 'main'); } 

Então você colocaria creativework-header.php e creativework-main.php no diretório de templates. Eu uso este método porque eu tenho vários tipos de postagem personalizados e dessa forma eu posso usar minha própria nomeação em vez de ter muitos arquivos single-cptname.php . Na verdade, eliminei todos os conteúdos de single.php e coloquei a function acima (e alguns mais para cada tipo de publicação) lá. Ao lado disso, posso include várias peças de modelo por tipo de postagem personalizado (alguns têm até 5). Isso mantém minha maneira de coisas melhor organizada!

PS, você tem certeza de que o nome do seu tipo de postagem personalizado é creativework e não creative-work ?