Pagina de arhivă pentru post type nu funcționează

15 mai 2013, 15:57:20
Vizualizări: 15.1K
Voturi: 2

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',
    ),
    )
);
4
Comentarii

Te rog să postezi codul real de înregistrare a tipului de postare personalizat. De asemenea: ce se întâmplă dacă setezi permalink-urile la valorile implicite (adică fără rescrieri) și/sau resetezi setările de permalink?

Chip Bennett Chip Bennett
15 mai 2013 16:01:21

Am adăugat codul la editare, am încercat permalink-ul implicit și se pare că funcționează conform așteptărilor

markyeoj markyeoj
15 mai 2013 16:11:10

Codul tău pare să funcționeze corect pentru mine. Te rog să verifici: http://wordpress.stackexchange.com/q/98995/21376 Cred că aceasta poate fi o duplicare funcțională a acelei întrebări.

s_ha_dum s_ha_dum
15 mai 2013 16:44:53

Privind la rewrite slug-ul pe care l-ai setat, încerci să elimini prefixul tipului de postare pentru a funcționa precum paginile? Dacă da, acest lucru nu va funcționa și va trebui să faci mult mai mult decât să modifici câteva flag-uri în register_post_type, introducând potențiale bug-uri care pot afecta întreg site-ul (conflicte între permalink-urile paginilor/categoriilor și noile URL-uri ale tipului de postare)

Tom J Nowell Tom J Nowell
15 mai 2013 16:45:38
Toate răspunsurile la întrebare 2
5
11

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:

Descriere imagine

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

15 mai 2013 16:53:44
Comentarii

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?

markyeoj markyeoj
15 mai 2013 18:26:42

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.

Tom J Nowell Tom J Nowell
15 mai 2013 18:58:13

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

markyeoj markyeoj
15 mai 2013 19:21:26

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

Tom J Nowell Tom J Nowell
15 mai 2013 19:46:00

perfect, mulțumesc @tom pentru răbdarea ta, în acest thread am învățat atât de multe de la tine. Mulțumesc foarte mult.

markyeoj markyeoj
15 mai 2013 19:51:44
2
-2

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' );
9 mar. 2015 14:37:29
Comentarii

Te rog să adaugi o explicație la răspunsul tău: de ce ar putea această soluție rezolva problema?

fuxia fuxia
9 mar. 2015 14:38:33

Acesta nu răspunde nici pe departe la întrebare.

TheDeadMedic TheDeadMedic
9 mar. 2015 15:49:46