Modelos para tipos de postagem personalizados e taxonomias personalizadas

4

Estou trabalhando em um tema personalizado para uma rede de sites implantados em uma instalação do WordPress MultiSite .

Dentro desse tema, eu crio 4 tipos de postagem personalizados que têm duas taxonomias adicionadas a todas elas. A primeira taxonomia é a post_tag one e a outra é uma taxonomia personalizada que se assemelha à category one.

Eu escolhi que todos os meus 4 tipos de post personalizado têm sua categoria de taxonomia porque eu não queria nenhuma categoria bleed dentro dos tipos de postagem.

Aqui está o meu código:

<?php
function o_post_types()
{
    $post_types = array(
        'articole' => array(
            'name' => 'Articole',
            'single' => 'Articol',
            'icon' => 'dashicons-admin-post'
        ),
        'evenimente' => array(
            'name' => 'Evenimente',
            'single' => 'Eveniment',
            'icon' => 'dashicons-video-alt'
        ),
        'concursuri' => array(
            'name' => 'Concursuri',
            'single' => 'Concurs',
            'icon' => 'dashicons-awards'
        ),
        'fotografii' => array(
            'name' => 'Fotografii',
            'single' => 'Fotografie',
            'icon' => 'dashicons-format-image'
        ),
        'promotii' => array(
            'name' => 'Promoții',
            'single' => 'Promoție',
            'icon' => 'dashicons-share'
        )
    );

    foreach ($post_types as $post_type) {
        $icon = $post_type['icon'];
        $name_lower = strtolower($post_type['name']);
        $single_lower = strtolower($post_type['single']);
        if ($post_type['name'] == 'Promoții') {
            $name_lower = 'promotii';
            $single_lower = 'promotie';
        }
        $labels = array(
            'name' => $post_type['name'],
            'singular_name' => $post_type['single'],
            'add_new' => 'Adaugă ' . $single_lower,
            'add_new_item' => 'Adaugă ' . $single_lower . ' nou',
            'edit_item' => 'Editează ' . $single_lower,
            'new_item' => $post_type['single'] . ' nou',
            'all_items' => 'Listă ' . $name_lower,
            'view_item' => 'Afișează ' . $single_lower,
            'search_items' => 'Caută în ' . $name_lower,
            'not_found' => 'Nici un ' . $single_lower . ' găsit.',
            'not_found_in_trash' => 'Nici un ' . $single_lower . ' găsit în Gunoi.',
            'parent_item_colon' => '',
            'menu_name' => $post_type['name']
        );

        $args = array(
            'labels' => $labels,
            'public' => true,
            'publicly_queryable' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'query_var' => true,
            'rewrite' => array('slug' => $name_lower, 'with_front' => false),
            'capability_type' => 'post',
            'has_archive' => true,
            'hierarchical' => false,
            'menu_position' => 5,
            'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
            'taxonomies' => array('post_tag'),
            'menu_icon' => $icon
        );
        register_post_type("cpt_" . $single_lower, $args);

        $labels = array(
            'name' => 'Categorii',
            'singular_name' => 'Categorie',
            'search_items' => 'Caută Categorii',
            'all_items' => 'Toate Categoriile',
            'parent_item' => 'Categorie Părinte',
            'parent_item_colon' => 'Categorie Părinte:',
            'edit_item' => 'Modifică Categorie',
            'update_item' => 'Actualizează Categorie',
            'add_new_item' => 'Adaugă Categorie nouă',
            'new_item_name' => 'Numele noii categorii',
            'menu_name' => 'Categorii',
        );
        $args = array(
            'hierarchical' => true,
            'labels' => $labels,
            'show_ui' => true,
            'show_admin_column' => true,
            'query_var' => true,
            'rewrite' => array(
                'hierarchical' => true,
                'slug' => $name_lower,
                'with_front' => false
            ),
        );
        register_taxonomy("tax_" . $name_lower, "cpt_" . $single_lower, $args);
    }
}

EDIT 1 *

Os nomes dos arquivos são os seguintes:

  • taxonomy-articole.php
  • taxonomy-concursuri.php
  • taxonomy-evenimente.php
  • taxonomy-fotografii.php
  • taxonomy-promotii.php

Estou tentando exibir uma lista como uma visão de categoria de todos os cpt s que têm esse termo. Ex: um cpt_evenimente (ou cpt_events em inglês) terá um tax_evenimente term (ou tax_events em inglês) assim:

O showoff do skate-park cpt terá atribuído um Evento ao ar livre term e ele terá que ser exibido devido ao seu termo no taxonomy-evenimente.php loop.

O problema é que os modelos de cada taxonomia não são carregados. O que há para ser feito?

    
por aifrim 14.08.2014 / 19:15

1 resposta

5

Você perdeu totalmente a convenção de nomenclatura ao acessar as páginas do arquivo de taxonomia e, provavelmente, o mesmo vale para o seu arquivar páginas para seus tipos de postagem personalizados

Veja como suas páginas de arquivo de taxonomia devem se parecer

  • taxonomia- {taxonomia} - {termo} .php - Se a taxonomia fosse sometax e o termo da taxonomia fosse someterm , o WordPress procuraria taxonomy-sometax-someterm.php . No caso de Post Formatos, a taxonomia é post_format e os termos são post_format-{format} . ou seja, taxonomy-post_format-post-format-link.php

  • taxonomia- {taxonomia} .php - Se a taxonomia fosse sometax , o WordPress procuraria taxonomy-sometax.php

  • taxonomy.php

  • archive.php

  • index.php

Assim, todos os seus modelos de taxonomia devem ser chamados de taxonomy-tax_{$name_lower}.php , em que $name_lower é o nome atribuído à variável.

Outro problema que eu levantei nos comentários para as suas postagens foi

  

Não use hífens em seus nomes, use sublinhados para separar palavras

Agora é a oportunidade de testar seus nomes com e sem hífens e ver como isso afeta o modo como seus modelos são usados.

Exemplo:

Se você criar seu nome de taxonomia tax-mytax e criar um modelo taxonomy-tax-mytax.php , perceberá que isso não funcionará, pois o wordpress lê seu modelo da seguinte forma: tax é seu nome de taxonomia e mytax é um termo

Uma última coisa, e eu não sei se você intencionalmente deixou isso de fora, mas sua função deve estar ligada ao init hook

EDIT 1

Apenas mais um ponto sobre boas práticas, escreva seus argumentos em inglês e torne-os traduzíveis. Alguém que fala uma língua diferente da sua terá um tempo difícil para descobrir o que os rótulos significam, como seria o caso comigo :-). Esta é também a grande razão pela qual sua função deve ser conectada a init para tornar os tradutores disponíveis

EDIT 2

Parece que suas regras de reescrita estão causando o seu problema. Do que foi discutido no chat,

  

Eu tenho uma taxonomia chamada tax_evenimente . É uma taxonomia de categoria. Eu tenho um termo Alte Evenimente com o slug alte-evenimente . site.com/evenimente/alte-evenimente deve ser exibido com taxonomy.php .

Sim, é isso que deve acontecer com sua regra de regravação, mas ela continua em 404 ing.

< --- SECÇÃO RASPADA --- >

EDIT 3

Eu encontrei um ótimo plugin para ajudar com as regras de reescrita para seus tipos de postagem personalizados. É chamado de Permalinks Personalizados de tipo de postagem ( OBSERVAÇÃO: não tenho nenhuma afiliação com o plug-in ). Como seu código está atualmente, deixe-o no lugar

Veja como tudo funciona:

( Por exemplo, vou usar cpt_evenimente e tax_evenimente )

  • Faça o download e instale o plug-in

  • Vá para a página de configurações do permalinks e role para baixo até as configurações dos tipos de postagem personalizados. É assim que vai ficar

  • Altere/%postname%/para/%year%/%monthnum%/%postname%/paraobterseuURLdesejado

  • Salvarseuspermalinks

Agora,paraostestes

  • site.com/evenimente/alte-evenimente/Exibeoarquivodetaxonomiaparatermosdataxonomiatax_evenimenteontaxonomy-tax_evenimente.php

  • site.com/evenimente/Exibeoarchivedotipodepostagempersonalizadoparaotipodepostagempersonalizadocpt_evenimente

  • site.com/evenimente/2014/10/testing-posts-1/Exibeapostagemúnicatestingpost1

Apenasumanota,acaixadeseleção"Usar permalink personalizado do arquivo de taxonomia personalizado" deve estar desmarcada

Espero que isso seja o que você precisa.

    
por Pieter Goosen 13.10.2014 / 20:30