it-swarm.com.de

Vorlagen für benutzerdefinierte Beitragstypen und benutzerdefinierte Taxonomien

Ich arbeite an einem benutzerdefinierten Thema für ein Netzwerk von Sites die unter einer WordPress MultiSite-Installation bereitgestellt werden.

Innerhalb dieses Themas erstelle ich 4 benutzerdefinierte Beitragstypen , denen zwei Taxonomien hinzugefügt wurden. Die erste Taxonomie ist der post_tag und die andere ist eine benutzerdefinierte Taxonomie, die der category ähnelt.

Ich habe gewählt, dass alle meine 4 benutzerdefinierten Beitragstypen ihre eigene Taxonomiekategorie haben , weil ich keine Kategorie Beschnittzugabe innerhalb der Beitragstypen haben wollte.

Hier ist mein 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 *

Die Dateinamen lauten wie folgt:

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

Ich versuche, eine Liste als Kategorieansicht aller cpts anzuzeigen, die diesen Begriff haben. Beispiel: Ein cpt_evenimente (oder cpt_events in Englisch) hat einen tax_evenimente Begriff (oder tax_events in Englisch) wie folgt:

Skatepark-Skateboard-Showoff cpt hat ein Outdoor-Event term zugewiesen und muss aufgrund seiner Laufzeit in der taxonomy-evenimente.php-Schleife angezeigt werden.

Das Problem ist, dass die Vorlagen für jede Taxonomie nicht geladen werden. Was ist zu tun?

4
aifrim

Sie haben die Namenskonvention beim Aufrufen der Taxonomie-Archivseiten völlig übersehen, und wahrscheinlich gilt das Gleiche auch für Ihre Archivseiten für Ihre benutzerdefinierten Beitragstypen

So sollten Ihre Taxonomie-Archivseiten aussehen

  • taxonomy- {taxonomy} - {term} .php - Wenn die Taxonomie sometaxund die Taxonomie sometermwäre, würde WordPress nach taxonomy-sometax-someterm.php suchen. Bei Post-Formaten lautet die Taxonomie post_format und die Begriffe post_format-{format}. d.h. taxonomy-post_format-post-format-link.php

  • taxonomy- {taxonomy} .php - Wenn die Taxonomie sometaxwäre, würde WordPress nach taxonomy-sometax.php suchen

  • taxonomy.php

  • archive.php

  • index.php

Daher sollten alle Taxonomie-Vorlagen taxonomy-tax_{$name_lower}.php heißen, wobei $name_lower der Name ist, der der Variablen zugewiesen wurde.

Ein weiteres Problem, das ich in meinen Kommentaren zu Ihren Posts angesprochen habe, war

Verwenden Sie keine Bindestriche in Ihren Namen, sondern verwenden Sie Unterstriche, um Wörter zu trennen

Dies ist jetzt die Gelegenheit, Ihre Namen mit und ohne Bindestrich zu testen und zu sehen, wie sich dies auf die Verwendung Ihrer Vorlagen auswirkt.

Beispiel:

Wenn Sie Ihren Taxonomienamen tax-mytax eingeben und eine Vorlage taxonomy-tax-mytax.php erstellen, werden Sie feststellen, dass dies nicht funktioniert, da WordPress Ihre Vorlage folgendermaßen liest: taxist Ihr Taxonomiename und mytaxist ein Begriff

Eine letzte Sache, und ich weiß nicht, ob Sie das absichtlich ausgelassen haben, aber Ihre Funktion sollte mit dem Hook initverknüpft sein

EDIT 1

Nur noch ein weiterer Punkt zur guten Praxis: Schreiben Sie Ihre Argumente auf Englisch und machen Sie sie übersetzbar. Jemand, der eine andere Sprache spricht als Sie, wird es schwer haben herauszufinden, was die Etiketten bedeuten, wie es bei mir der Fall wäre :-). Dies ist auch der Hauptgrund, warum Ihre Funktion mit initverknüpft werden sollte, um die Übersetzer verfügbar zu machen

EDIT 2

Es scheint, dass Ihre Umschreiberegeln Ihr Problem verursachen. Aus dem, was im Chat besprochen wurde,

Ich habe eine Taxonomie namens tax_evenimente. Es ist eine kategorieähnliche Taxonomie. Ich habe einen Begriff Alte Evenimente mit dem Slug alte-evenimente. site.com/evenimente/alte-evenimente sollte mit taxonomy.php angezeigt werden.

Ja, genau das sollte mit Ihrer Umschreiberegel passieren, aber sie bleibt weiterhin 404ing.

<--- ABSCHNITT GEKRATZT --->

EDIT 3

Ich habe ein großartiges Plugin gefunden, das Ihnen beim Umschreiben Ihrer benutzerdefinierten Beitragstypen hilft. Es heißt Custom Post Type Permalinks (HINWEIS: Ich habe keine Zugehörigkeit zum Plugin). Lassen Sie Ihren Code an Ort und Stelle

So funktioniert alles:

(Aus Gründen der Beispiele verwende ich cpt_evenimente und tax_evenimente)

  • Downloaden und installieren Sie das Plugin

  • Gehen Sie zur Seite mit den Einstellungen für Permalinks und blättern Sie zu den Einstellungen für Ihre benutzerdefinierten Beitragstypen. So wird es aussehen

enter image description here

  • Ändern Sie /%postname%/ in /%year%/%monthnum%/%postname%/, um die gewünschte URL zu erhalten

  • Speichere deine Permalinks

Nun zu den Tests

  • site.com/evenimente/alte-evenimente/ Zeigt das Taxonomiearchiv für Begriffe aus der Taxonomie tax_evenimente auf taxonomy-tax_evenimente.php an.

  • site.com/evenimente/ Zeigt das Archiv für benutzerdefinierte Posttypen für benutzerdefinierte Posttypen an. cpt_evenimente

  • site.com/evenimente/2014/10/testing-posts-1/ Zeigt den einzelnen Beitrag an. testing post 1

Nur eine Anmerkung, das Kontrollkästchen für "Benutzerdefinierten Permalink des benutzerdefinierten Taxonomie-Archivs verwenden" sollte deaktiviert sein

Ich hoffe das ist was du brauchst.

5
Pieter Goosen