Modèles pour types de publication personnalisés et taxonomies personnalisées

4

Je travaille sur un thème personnalisé pour un réseau de sites déployés sous une installation WordPress MultiSite .

Au sein de ce thème, je crée 4 types de publication personnalisés auxquels sont ajoutées deux taxonomies. La première taxonomie est post_tag one et l’autre est une taxonomie personnalisée qui ressemble à category un.

J'ai choisi que tous mes 4 types de publication personnalisés aient leur propre catégorie de taxonomie car je ne souhaitais aucune catégorie fond perdu . dans les types de publication.

Voici mon code:

<?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 *

Les noms de fichier sont les suivants:

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

J'essaie d'afficher une liste en tant que vue de catégorie de tous les cpt s qui portent ce terme. Ex: a cpt_evenimente (ou cpt_events en anglais) aura un tax_evenimente terme (ou tax_events en anglais) comme suit:

Le show de skateboard de skate-park cpt aura attribué un événement en plein air term et il devra être affiché en raison de sa désignation dans le taxonomy-evenimente.php boucle.

Le problème est que les modèles de chaque taxonomie ne se chargent pas. Qu'y a-t-il à faire?

    
posée aifrim 14.08.2014 - 19:15

1 réponse

5

Vous avez totalement manqué la convention de dénomination en accédant aux pages d'archives de taxonomie , et il en va probablement de même pour votre pages d'archive pour vos types d'articles personnalisés

Voici à quoi devraient ressembler vos pages d'archives de taxonomie

  • taxonomie- {taxonomie} - {terme} .php - Si la taxonomie était sometax et le terme taxonomie était someterm WordPress rechercherait taxonomy-sometax-someterm.php . Dans le cas des formats de post, la taxonomie est post_format et les termes sont post_format-{format} . c'est-à-dire taxonomy-post_format-post-format-link.php

  • taxonomie- {taxonomie} .php - Si la taxonomie était sometax , WordPress rechercherait taxonomy-sometax.php

  • taxonomy.php

  • archive.php

  • index.php

Ainsi, tous vos modèles de taxonomie doivent s'appeler taxonomy-tax_{$name_lower}.php$name_lower est le nom attribué à la variable.

Un autre problème que j'ai soulevé dans mes commentaires sur vos messages est

.
  

N'utilisez pas de trait d'union dans vos noms, utilisez des traits de soulignement pour séparer les mots

C’est maintenant l’occasion de tester vos noms avec et sans trait d’union et de voir en quoi cela affecte la façon dont vos modèles sont utilisés.

Exemple:

Si vous faites votre nom de taxonomie tax-mytax et créez un modèle taxonomy-tax-mytax.php , vous remarquerez que cela ne fonctionnera pas, car wordpress lit votre modèle comme suit: tax est votre nom de taxonomie et mytax est un terme

Une dernière chose, et je ne sais pas si vous l'avez volontairement laissé de côté, mais votre fonction devrait être reliée au init hook

.

MODIFIER 1

Juste un autre point sur les bonnes pratiques, écrivez vos arguments en anglais et rendez-les traduisibles. Quelqu'un qui parle une langue différente de la vôtre aura du mal à comprendre ce que signifient les étiquettes, comme ce serait le cas avec moi :-). C’est aussi la principale raison pour laquelle votre fonction doit être reliée à init afin de rendre les traducteurs disponibles

EDIT 2

Il semble que vos règles de réécriture soient la cause de votre problème. De ce qui a été discuté dans le chat,

  

J'ai une taxonomie nommée tax_evenimente . C'est une taxonomie de type catégorie. J'ai un terme Alte Evenimente avec le slug alte-evenimente . site.com/evenimente/alte-evenimente devrait être affiché avec taxonomy.php .

Oui, c'est ce qui devrait arriver avec votre règle de réécriture, mais elle continue à 404 ing.

< --- SECTION DÉCHIQUÉ --- >

EDIT 3

J'ai trouvé un excellent plug-in pour vous aider avec les règles de réécriture de vos types d'articles personnalisés. Il s’appelle liens permanents de type publication personnalisée ( NOTE: je n’ai aucune affiliation avec le plugin ). En l'état actuel de votre code, laissez-le en place

Voici comment tout fonctionne:

( Par exemple, je vais utiliser cpt_evenimente et tax_evenimente )

  • Téléchargez et installez le plug-in

  • Accédez à la page de paramètres de votre permalien et faites défiler jusqu’à la configuration de vos types de publication personnalisés. Voici à quoi cela ressemblera

  • Remplacez/%postname%/par/%year%/%monthnum%/%postname%/pourobtenirl'URLsouhaitée

  • Enregistrezvoslienspermanents

Maintenant,pourlestests

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

  • site.com/evenimente/Affichel'archivedetypedemessagepersonnalisépourletypedemessagepersonnalisécpt_evenimente

  • .
  • site.com/evenimente/2014/10/testing-posts-1/Affichelapublicationuniquetestingpost1

Justeunenote,lacaseàcocher"Utiliser un permalien personnalisé d'archive de taxonomie personnalisée" doit être décochée

J'espère que c'est ce dont vous avez besoin.

    
réponse donnée Pieter Goosen 13.10.2014 - 20:30

Lire d'autres questions sur les étiquettes