Cum să afișezi taxonomii pentru un custom post type ca o pagină de arhivă
Salut, am un custom post type numit results
. Am creat și categorii pentru acest post type folosind o taxonomie. Nu sunt sigur dacă am configurat-o corect, dar codul pe care îl am funcționează, așa că rămân la el. Dacă vedeți o metodă mai bună sau orice eroare, vă rog să-mi spuneți.
Pot să creez un post personalizat și să-i setez o categorie. Următorul pas este să creez o pagină de categorii care să funcționeze precum archive.php, dar doar pentru categoriile custom post type-urilor.
De exemplu, dacă am un post personalizat pentru results
și categoria setată la accidente auto
, aș dori să le afișez pe toate exact cum face archive.php pentru postările normale.
Am încercat să accesez un URL de genul acesta, dar sunt redirecționat către o pagină 404, deși am un fișier archive-results.php
www.myurl.com/results/categories/car-accidents
Iată codul pe care l-am folosit pentru a configura custom post type-ul și taxonomia. Scuze dacă este lung, dar simt că este necesar să includ totul.
// Crează custom post type
function create_posttype() {
register_post_type( 'Results',
array(
'labels' => array(
'name' => __( 'Results' ),
'singular_name' => __( 'Results' )
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'results'),
'taxonomies' => array( 'results', 'result-category' ),
)
);
}
add_action( 'init', 'create_posttype' );
// Crează categorie pentru post type-ul specific
function tr_create_my_taxonomy() {
register_taxonomy(
'results-categories',
'results',
array(
'label' => __( 'Result Categories' ),
'rewrite' => array( 'slug' => 'result-category' ),
'hierarchical' => true,
'has_archive' => true
)
);
}
add_action( 'init', 'tr_create_my_taxonomy' );
Am omis ceva care împiedică acest URL să funcționeze?
www.myurl.com/results/categories/car-accidents
Mulțumesc anticipat
URL-urile dorite:
www.example.com/rezultate/nume-post/
www.example.com/rezultate/categorii/nume-categorie/
Două modificări față de codul original:
S-a adăugat prioritate ambelor hook-uri
add_action
pentru a inversa ordinea în care sunt executate. Ordinea contează în acest caz, deoarece regulile de rescriere pentru atașamentele tipului de post suprascriu regulile de rescriere ale taxonomiilor. Efect secundar: URL-urile pentru atașamente nu funcționează pentru acest tip de post!Rescrierea pentru taxonomie a fost schimbată în
rezultate/categorii
.
// Crează tipul de post personalizat
function create_posttype() {
register_post_type( 'rezultate',
array(
'labels' => array(
'name' => __( 'Rezultate' ),
'singular_name' => __( 'Rezultat' )
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'rezultate'),
'taxonomies' => array( 'rezultate', 'categorie-rezultat' ),
)
);
}
// ADAUGATĂ PRIORITATE
add_action( 'init', 'create_posttype', 9 );
// Crează categoria pentru tipul specific de post
function tr_create_my_taxonomy() {
register_taxonomy(
'categorii-rezultate',
'rezultate',
array(
'label' => __( 'Categorii Rezultate' ),
// SCHIMBAT SLUG
'rewrite' => array( 'slug' => 'rezultate/categorii' ),
'hierarchical' => true,
'has_archive' => true
)
);
}
// ADAUGATĂ PRIORITATE
add_action( 'init', 'tr_create_my_taxonomy', 8 );
De asemenea, reține că cel mai specific șablon general pentru aceasta va fi taxonomy-categorii-rezultate.php
, care va reveni la taxonomy.php
, apoi la archive.php
.
