Pagina de arhivă pentru tipul de postare personalizat nu funcționează
Încerc să creez un tip de postare personalizat. Totul funcționează bine, cu excepția paginii de arhivă. Pagina mea de arhivă pentru tipul de postare personalizat este archive-courses.php, dar nu funcționează și afișează archive.php implicit. Este ceva greșit în codul meu?
Mă poate ajuta cineva, vă rog?
function td_courses() {
$labels = array(
'name' => _x( 'Cursuri', 'td' ),
'singular_name' => _x( 'Cursuri', 'td' ),
'add_new' => _x( 'Adaugă Nou', 'td' ),
'add_new_item' => __( 'Adaugă curs nou' ),
'edit_item' => __( 'Editează curs' ),
'new_item' => __( 'Cursuri noi' ),
'all_items' => __( 'Cursuri' ),
'view_item' => __( 'Vezi cursuri' ),
'search_items' => __( 'Caută cursuri' ),
'not_found' => __( 'Nu s-au găsit cursuri' ),
'not_found_in_trash' => __( 'Nu s-au găsit cursuri în Coșul de gunoi' ),
'menu_name' => 'Cursuri'
);
$args = array(
'labels' => $labels,
'public' => true,
'menu_position' => 10,
'menu_icon' => 'dashicons-welcome-learn-more',
'supports' => array( 'title', 'editor', 'thumbnail', 'author' ),
'has_archive' => true,
'capability_type' => 'page',
'rewrite' => array( 'slug' => 'curs' ),
);
register_post_type( 'courses', $args );
}
add_action( 'init', 'td_courses' );
function td_courses_taxonomies() {
$labels = array(
'name' => _x( 'Categorii Cursuri', 'td' ),
'singular_name' => _x( 'Categorii Cursuri', 'td' ),
'search_items' => __( 'Caută Categorie Curs' ),
'all_items' => __( 'Toate Categoriile de Cursuri' ),
'parent_item' => __( 'Categorie Curs Părinte' ),
'parent_item_colon' => __( 'Categorie Curs Părinte:' ),
'edit_item' => __( 'Editează Categorie Curs' ),
'update_item' => __( 'Actualizează Categorie Curs' ),
'add_new_item' => __( 'Adaugă Categorie Curs Nouă' ),
'new_item_name' => __( 'Nume Nou Categorie Curs' ),
'menu_name' => __( 'Categorie Curs' ),
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'lista-cursuri' ),
);
register_taxonomy( 'courses_category', array( 'courses' ), $args );
}
add_action( 'init', 'td_courses_taxonomies', 0 );
Mulțumesc

Tipul tău de post, courses
, are un slug de rescriere course
. Deci șablonul tău de arhivă va fi archive-course.php
.
Taxonomia ta, courses_category
, are un slug de rescriere course
, deci șablonul tău de arhivă pentru taxonomie va fi taxonomy-courses.php
.
Această ierarhie completă de șabloane poate fi utilă.
Dacă dorești o pagină de arhivă care afișează toate postările de tipul courses
la yoursite.com/courses
, ar trebui să atribui tipului de post un slug de rescriere courses
. (Cred că aceasta este valoarea implicită, deoarece tipul tău de post este courses
.)
Șablonul de arhivă pentru taxonomie, taxonomy-[slug].php
, va fi invocat atunci când vizualizezi o pagină de arhivă cu toate postările de tipul courses
asignate unui anumit termen din taxonomie. Deci, dacă ai un termen beginner
și slug-ul de rescriere courses
pentru termenul din taxonomie, vei vedea o arhivă cu cursuri pentru începători la yoursite.com/courses/beginner
.
Dacă atribui același slug de rescriere atât tipului de post cât și taxonomiei, s-ar putea să ai unele conflicte. Dar nu sunt sigur.
După cum a spus Pieter Goosen, va trebui să resetezi regulile de rescriere de fiecare dată când faci astfel de modificări.

De fapt nici măcar nu am verificat rewrite slugs când am parcurs codul. Cel mai probabil, problema este rewrite slug. Puteți avea același slug pentru post type și taxonomie, dar ar necesita destul de multă muncă suplimentară. Îmi amintesc că am răspuns la o astfel de întrebare acum ceva timp, unde am folosit un plugin pentru a rezolva problema cu regulile de rewrite. Pe scurt, ar trebui să evitați cu adevărat să aveți aceleași rewrite slugs.

Ciudat, am schimbat numele template-ului de arhivă în archive-course.php dar încă am aceeași problemă. De asemenea, am schimbat rewrite slug-ul taxonomiilor în courses-list, dar fără succes :(

actualizează întrebarea ta cu ce ai acum, este greu de știut dacă trebuie să folosești course
sau courses
?

Ai resetat din nou regulile de rescriere? Lucruri pe care le-aș recomanda să încerci: configurează archive-course.php
și archive-courses.php
și apoi încearcă să elimini regulile tale de rescriere pentru a vedea unde ajungi. Asigură-te că te uiți la pagina corectă (<body>
tag-ul tău ar trebui să aibă o clasă post-type-archive-courses
-- dacă tema folosește body_class()
corect).

Da. Am salvat din nou permalinkul și am clasa body în template-ul meu care afișează lista de clase archive tax-courses_category term-test-1 term-6 logged-in admin-bar hfeed customize-support
De asemenea, am creat ambele pagini de arhivă archive-courses-list.php, archive-courses.php și archive-course.php dar niciuna nu funcționează

Numele de clase pe care le descrii sunt adăugate unei arhive de taxonomie care va încărca fișierul șablon taxonomy-<slug>.php
. Dacă nu vezi clasa post-type-archive-courses
în tag-ul body, nu te afli pe pagina de arhivă a tipului de postare.

Da. În sfârșit, afișează pagina mea. taxonomy-courses_category.php acesta funcționează.
Dar totuși, sunt confuz, de ce arhiva mea archive-courses.php nu funcționează. Am folosit acest sistem pentru a afișa categoria mea data trecută. Dar de data aceasta nu am avut noroc :(

Conform codului pe care l-ai postat, șablonul archive-courses.php
ar trebui să fie afișat când vizitezi yoursite.com/course
. Dacă nu se întâmplă asta, probabil nu ai reușit să resetezi corect regulile de rescriere sau ai alte reguli care interferează cu regulile de arhivă ale CPT-ului tău.

După cum a menționat Pieter Goosen, este necesar să reîncarci structurile de legături permanente atunci când creezi o nouă taxonomie sau tip de postare personalizat. Accesează setările site-ului tău -> legături permanente și dă clic pe "butonul de salvare".
Această soluție a funcționat pentru mine.
