Pagina de arhivă pentru post type nu funcționează
Am înregistrat un post type personalizat folosind Custom Post Type UI, și am creat o pagină de arhivă numită archive-recipe.php, unde 'recipe' este numele post type-ului meu personalizat. Dar nu funcționează, în schimb se folosește fișierul implicit archive.php
. Am setat has-archive
la true
dar tot nu merge. Cum pot rezolva această problemă?
Iată codul:
register_post_type(
'recipe', array(
'label' => 'Rețete',
'description' => 'Acesta este un Post Type Personalizat pentru Rețete',
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'hierarchical' => true,
'rewrite' => array('slug' => ''),
'query_var' => true,
'has_archive' => true,
'exclude_from_search' => false,
'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes',),
'labels' => array (
'name' => 'Rețete',
'singular_name' => 'Rețetă',
'menu_name' => 'Rețete',
'add_new' => 'Adaugă Rețetă',
'add_new_item' => 'Adaugă Rețetă Nouă',
'edit' => 'Editează',
'edit_item' => 'Editează Rețeta',
'new_item' => 'Rețetă Nouă',
'view' => 'Vezi Rețeta',
'view_item' => 'Vezi Rețeta',
'search_items' => 'Caută Rețete',
'not_found' => 'Nicio Rețetă Găsită',
'not_found_in_trash' => 'Nicio Rețetă în Coșul de Gunoi',
'parent' => 'Rețetă Părinte',
),
)
);
Având în vedere înregistrarea standard, ar trebui să aveți următoarele:
- Un tip de postare cu numele 'recipe'
- O arhivă de postări rețete la example.com/recipe/
- Postări de rețete cu URL-uri de forma example.com/recipe/helloworldrecipe/
- Un șablon
archive-recipe.php
- Un șablon
single-recipe.php
Totuși, văd acest lucru în codul dvs. de înregistrare:
'rewrite' => array('slug' => ''),
Aceasta sugerează că încercați să eliminați prefixul 'recipe' din URL-urile rețetelor. Rezultatul este că arhiva dvs. de postări rețetă este acum:
URL site + ''
Care este deja ocupat de pagina de start, așa că arhiva dvs. de postări este imposibil de accesat.
Pe lângă asta, nu face ceea ce credeți că face. Nu puteți schimba un tip de postare personalizată pentru a nu avea partea '/recipe/' în URL-urile sale folosind doar parametrii rewrite din register_post_type. Trebuie să faceți alte modificări, care pot introduce și bug-uri care pot afecta site-ul.
De exemplu, dacă aveți o pagină numită 'dovleac' și o rețetă numită 'dovleac', cum ar trebui să știe WordPress care să încarce când vizitați example.com/dovleac? Nu știe, așa că va încărca orice regulă de rescriere găsește prima.
Deci, dacă aveți o rețetă pentru plăcintă, dar nu există o pagină numită plăcintă, și caută pagina și nu o găsește, nu veți obține rețeta, veți obține o eroare 404.
Așadar, v-aș recomanda cu tărie să abandonați încercarea. Face ca URL-urile dvs. să aibă mai puțin sens și, în ciuda non-sensului spus de "experții" SEO, este mai probabil să vă afecteze, nu să vă ajute clasamentele în motoarele de căutare dacă face ceva (este foarte probabil să nu facă absolut nimic pentru a vă ajuta).
Deci, eliminați parametrul rewrite și resalvați permalink-urile.
Actualizare
După ce ați postat acest link:
http://seemynewwebsite.com/g2bm/recipecategory/appetizers/
Acum este clar că încărcați o taxonomie și așteptați o arhivă de tip de postare. O taxonomie nu este un tip de postare, după cum puteți vedea aici, ele nu au aceleași fallback-uri:
Mai mult, nu ar avea sens să o facă. De exemplu, care șablon de arhivă de tip de postare ar fi folosit în aceste scenarii:
- O taxonomie care conține 2 tipuri de postare, persoane și locații. Ar folosi archive-location.php sau archive-people.php?
- O taxonomie de utilizator, referitoare la utilizatori, nu la postări
Deci, în schimb, folosiți un șablon de taxonomie pentru taxonomia dvs., nu un șablon de arhivă de tip de postare. În acest caz, taxonomy-recipecategry.php

Mulțumesc, o îmbunătățire bună, rețeta acum afișează postările, cea anterioară dădea eroarea 404.. dar sunt încă confuz în legătură cu asta, de fapt am crezut că dacă vizualizez o singură categorie exemplu, va folosi fișierul archive-recipe.php pe care l-am creat, dar în schimb folosește în continuare archive.php. ce e în neregulă cu asta?

Aaaaah, archive-recipe.php este pentru o arhivă de postări, asta nu este o arhivă de postări, este o listare de taxonomie, ai nevoie de un șablon de taxonomie.

mulțumesc, am creat taxonomy-recipe.php dar încă nu funcționează, folosește în continuare archive.php..

Taxonomia ta nu se numește rețetă, rețeta este un tip de postare nu o taxonomie. taxonomy-taxonomyname.php
, tipul de postare pe care îl listează o taxonomie este complet irelevant aici

Adaugă acest filtru în fișierul tău functions.php:
function namespace_add_custom_types( $query ) {
if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
$query->set( 'post_type', array(
'post', 'nav_menu_item', 'your-custom-post-type-here' // înlocuiește cu tipul tău personalizat de postare
));
return $query;
}
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );
