Șablon arhivă pentru termenii taxonomiei

7 dec. 2012, 20:57:46
Vizualizări: 21K
Voturi: 3

Am înregistrat un tip personalizat de postare [equipment] și am o taxonomie [equipment_type] în care am categorii părinte și copil. De exemplu:

Equipment (Tip personalizat de postare)

Equipment Types (Taxonomie)

Cameras (Termen părinte)

  • Camera A (Termen copil)

  • Camera B

Ceea ce doresc să creez este efectiv o pagină de arhivă pentru termenii taxonomiei. Astfel, când fie 'Cameras' sau 'Camera A' este selectat, să afișeze să zicem 12 postări cu titlu și imagine reprezentativă (linkuri către postarea individuală) plus paginare.

Am încercat o interogare standard WP și Loop și întotdeauna ajunge să afișeze toate postările taxonomiei din toți termenii.

În prezent am un șablon taxonomy-equipment_types.php configurat pentru a gestiona interogarea.

3
Comentarii

Te rog să explici ce înțelegi prin Categorie de Taxonomie. Întrebarea ta confundă taxonomia și categoria (care este un tip de taxonomie). Vrei să spui că ai termeni ierarhici pentru taxonomia ta personalizată, equipment_type? De asemenea, este cameras un termen pentru taxonomia equipment_type?

Chip Bennett Chip Bennett
7 dec. 2012 21:00:50

Îmi cer scuze, probabil confund terminologia. Am o taxonomie numită 'equipment_type' și în cadrul acesteia am 'cameras', 'lenses' etc... sunt aceștia termeni?

Sunt ierarhici și funcționează asemănător cu categoriile de la postările din setarea standard WordPress.

user1833715 user1833715
7 dec. 2012 21:07:36

Ah, acum ai înțeles! cameras, lenses, camera-a și camera-b sunt termeni ai taxonomiei equipment_type. Termenii camera-a și camera-b sunt copii ai termenului cameras.

Chip Bennett Chip Bennett
7 dec. 2012 21:45:05
Toate răspunsurile la întrebare 3
0

Vreau să documentez acest lucru pentru că am găsit răspunsul recent.

Problema cu taxonomiile este că majoritatea dezvoltatorilor au așteptarea mentală ca taxonomia să fie vizibilă în URL-ul post_type sub forma:

http://hostname/post_type/taxonomy_term

În schimb, veți găsi URL-ul în:

http://hostname/taxonomy_slug/taxonomy_term

Aceasta înseamnă că adesea putem crea șablonul corect ca

taxonomy-taxonomy_slug-taxonomy_term.php

Dar modul corect de a-l folosi este să ne așteptăm să fie în URL

http://hostname/taxonomy_slug/taxonomy_term

Pentru a vedea URL-ul corect pentru taxonomie, putem folosi

get_the_term_list($post->ID,'taxonomy_slug')

Și să testăm unde va duce link-ul.

24 iul. 2013 04:31:35
1

Ierarhia de șabloane din WordPress oferă fișierul exact de șablon de care ai nevoie: taxonomy-{taxonomy}-{term}.php.

Deci, pentru a crea un șablon personalizat pentru termenul cameras din taxonomia equipment_types, ai crea un fișier numit taxonomy-equipment_types-cameras.php.

(Notă, poți crea și un fișier de șablon pentru taxonomia în sine; pur și simplu omite slug-ul {term}: taxonomy-{taxonomy}.php, sau taxonomy-equipment_types.php în cazul tău.)

Poți afișa condiționat conținut bazat pe ierarhie prin interogarea fie a părintelui termenului, prin proprietățile obiectului returnate de get_term(), fie a copiilor termenului, prin get_term_children().

8 dec. 2012 14:39:54
Comentarii

Mulțumesc Chip, credeam că șablonul WP oferă ceea ce am nevoie, așa cum ai sugerat: taxonomy-equipment_types.php

Cred că mă chinui să înțeleg cum să afișez conținutul/postările în funcție de termenii selectați de utilizator pentru părinte și/sau copil, cameras sau cameras-a.

Sugerezi să folosesc 'get_term()' pentru a determina ce conținut/postări ar trebui afișate în buclă?

Sunt relativ nou în PHP și în prezent învăț prin Lynda.com. Așa că va trebui să aprofundez puțin și să încerc să înțeleg procesul.

Ai putea oferi un exemplu aproximativ pentru a mă ajuta să înțeleg ce trebuie să fac?

user1833715 user1833715
8 dec. 2012 15:10:52
0

Am avut o problemă similară. Problema cu răspunsurile de mai sus este că toate necesită să specifici CPT-ul, taxonomia sau termenul.

Dacă - după cum ai indicat - vrei să obții aceste informații dinamic în funcție de pagina CPT pe care se află utilizatorul, poți încerca următoarea soluție (care funcționează pentru mine), care afișează toate taxonomiile pentru tipul de postare personalizat curent.

(original din acest post cu ajutorul lui GhostToast)

 <?php get_header(); ?>
  <div id="content">
<div id="main">

  <ul>

<? // Începe interogarea arhivelor termenilor de taxonomie
$post_type = get_post_type(); // află numele CPT
$taxonomies = get_object_taxonomies($post_type); // Găsește taxonomiile
if($taxonomies){
foreach($taxonomies as $taxonomy){
// doar taxonomii ierarhice - fără etichete
if(is_taxonomy_hierarchical($taxonomy)){

    $terms = get_terms($taxonomy, array(
'orderby'       => 'name', 
'order'         => 'Asc',
'hide_empty'    => true )); 

 foreach ( $terms as $term ) {  


// exemplu de afișare mai jos ?>

<li>

 <h1><a href="<?php echo get_term_link($term->slug, $taxonomy); ?> "><? echo $term->name; ?></a></h1>

   <div class="imgBox">

     <a href="<?php echo get_term_link($term->slug, $taxonomy); ?> " title="<? echo $term->name; ?>" >
     <img src="<?php echo get_template_directory_uri(); ?>/timthumb.php?src=/library/images/dingy-placeholder.png&amp;h=196&amp;w=285&amp;zc=1" alt="<?php the_title(); ?>" /></a>
   </div>

           <div class="the-excerpt">
            <a href="<?php echo get_term_link($term->slug, $taxonomy); ?> "><? echo $term->description; //poți adăuga asta în admin ?> - click pentru a vedea mai mult</a>
            </div>
 </li>
        <?  

   }
 }
}
}?>

     </ul>


<?php wp_reset_query(); ?>

     </div> <!-- sfârșit #main -->
   </div> <!-- sfârșit #content -->

 <?php get_footer(); ?>

Salvează codul de mai sus într-un fișier numit ceva de genul archive-mycpt.php, apoi în archive.php adaugă acest cod după apelul header;

<?php get_header(); ?>

<?php  // este acesta unul dintre CPT-urile noastre? Dacă da, direcționează către pagina de arhivă personalizată
  if ( is_custom_post_type() ){ 
include (TEMPLATEPATH . '/archive-mycpt.php'); 

        // dacă nu, continuă...

    } else {  ?>

               <!-- conținut archive.php   -->

   <? } ?>
27 iul. 2013 05:13:40