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_actionpentru 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.