web-dev-qa-db-fra.com

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

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

Dans ce thème, je crée 4 types de messages personnalisés} qui ont deux taxonomies ajoutées à chacun d'eux. La première taxonomie est celle de post_tag et l’autre est une taxonomie personnalisée qui ressemble à celle de category.

J'ai choisi que tous mes 4 types de publication personnalisés aient leur catégorie de taxonomie propre car je ne voulais pas de 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 sous la forme d'une vue catégorie de tous les cpts qui comportent ce terme. Ex: un cpt_evenimente (ou cpt_events en anglais) aura un tax_evenimenteterme _ (ou tax_events en anglais) comme suit:

Skate-park showoffcpt aura assigné un événement en plein airterm et il devra être affiché en raison de son terme dans la boucle taxonomy-evenimente.php.

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

4
aifrim

Vous avez totalement manqué la convention de dénomination lorsque vous vous êtes rendu sur les pages d'archive taxonomy , et il en va probablement de même pour vos 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 de 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 être appelés taxonomy-tax_{$name_lower}.php, où $name_lower est le nom attribué à la variable.

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

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 comment cela affecte la façon dont vos modèles sont utilisés.

Exemple:

Si vous faites votre nom de taxonomie tax-mytax et que vous 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 intentionnellement laissé de côté, mais votre fonction devrait être reliée au crochet init

EDIT 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 liée à init afin de rendre les traducteurs disponibles

EDIT 2

Il semble que vos règles de réécriture soient à l'origine 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 se passer avec votre règle de réécriture, mais elle continue à 404ing.

<--- SECTION DÉCHAÎNÉE --->

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 Custom Post Type Permalinks (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 souci d'exemples, je vais utiliser cpt_evenimente et tax_evenimente)

  • Téléchargez et installez le plugin

  • Accédez à la page de paramètres de votre permalien et faites défiler jusqu’à la configuration de vos types de publication personnalisés. Voilà à quoi ça va ressembler

enter image description here

  • Remplacez /%postname%/ par /%year%/%monthnum%/%postname%/ pour obtenir l'URL souhaitée.

  • Enregistrez vos permaliens

Maintenant, pour les tests

  • site.com/evenimente/alte-evenimente/ Affiche les archives de taxonomie pour les termes de taxonomie tax_evenimente sur taxonomy-tax_evenimente.php

  • site.com/evenimente/ Affiche l'archive de type de publication personnalisée pour le type de publication personnalisé cpt_evenimente.

  • site.com/evenimente/2014/10/testing-posts-1/ Affiche le post unique testing post 1

Juste une note, la case à cocher "Utiliser un lien permanent personnalisé d'une archive de taxonomie personnalisée" doit être décochée.

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

5
Pieter Goosen