2015-12-20 17 views
5

Sto lavorando su un tema WordPress personalizzato.Come posso visualizzare un elenco di categorie e tutti i loro post in WordPress?

Sto tentando di mostrare un elenco di categorie (come intestazioni) per un tipo di post personalizzato e sotto l'intestazione di ciascuna categoria vorrei elencare i titoli dei post e un singolo campo personalizzato. Sto usando il plugin Tipi. Conosco un po 'di php e ho qualche esperienza con WordPress, ma non abbastanza per capire come funziona.

Esempio:

personalizzato Post Tipo: Voce di menu

campo personalizzato per questo tipo del messaggio: Articolo Prezzo

Categoria: otturazioni Sandwich

Categoria: Minestre

risultato desiderato:..

Sandwich otturazioni

formaggio - £ # ##

Ham - £ # ##

Tuna - £ #. ##

...

Minestre

pomodoro

pollo

di verdure

L'idea sarà per nuove categorie da aggiungere al volo (ad esempio , un giorno potrebbero iniziare a vendere scioglimenti), e per WP per scorrere le categorie a Se ne aggiungono di nuovi, risparmiando dal dover scrivere hard-code in nuove categorie sulla pagina man mano che vengono aggiunti.

Ecco quello che ho finora:

<?php 

    $args = array(
     'post_type' => 'menu-item', 
     'orderby' => 'name', 
     'parent' => 0 
    ); 

    $categories = get_categories($args); 

    foreach ($categories as $category) { 

     $posts = get_posts($args); 
     $item_price = types_render_field("item-price"); 

     echo '<h2>' . $category->name . '</h2>'; 
     ?> 
      <ul><?php 
      foreach($posts as $post) { 
      ?> 
       <li><?php the_title(); ?>, <?php echo $item_price; ?></li> 
      <?php 
     }  
    } 
?> 

Quello che sto ricevendo è questo:

Panini

pomodoro,

Formaggio svizzero,

francese Brie,

francese Brie,

...

Minestre

pomodoro, £ 2.60

Formaggio svizzero, £ 2.60

French Brie, £ 2.60

Brie francese, £ 2,60

Qualsiasi aiuto sarebbe apprezzato!

UPDATE

Questo sembra aver contribuito:

<?php 

    $args = array(
     'post_type' => 'menu-item' 
    ); 

    $categories = get_categories($args); 
    $posts = get_posts($args); 


    foreach ($categories as $category) { 



     echo '<h2>' . $category->name . '</h2>'; 
     ?> 

     <div class="menu-items-container"> 
      <?php foreach($posts as $post) { ?> 
       <?php $item_price = types_render_field("item-price"); ?> 
       <?php if (in_category($category)) { ?> 
        <p><?php the_title(); ?>, <?php echo $item_price; ?></p> 
       <?php } ?> 
      <?php } ?> 
     </div> 
<?php } ?> 

E mi sta dando i risultati che stavo cercando. Sono incappato in questa soluzione attraverso la sperimentazione e il felice incidente, quindi sono consapevole che potrebbe non essere la migliore pratica: consigli o suggerimenti per il miglioramento sarebbero i benvenuti!

+1

Molto interessante domanda, perché è davvero facile da realizzare, MA *** *** se scegli la strada più semplice e più generale (* come hai fatto tu come soluzione *), è molto costoso da gestire. In una piccola installazione con solo alcune categorie e post hai già in esecuzione più di 100 query, il che è folle. Sfortunatamente sono completamente consumato da una giornata impegnativa, non ho la forza di codificare un esempio funzionante., Ma la soluzione migliore è eseguire una query per ottenere tutti i messaggi, e usare 'usort()' per ordinare risultati in base alla categoria –

risposta

3

Qualcosa di simile potrebbe essere migliore, in quanto non fa scorrere tutti i posti per ogni categoria:

<?php 

    $args = array(
     'post_type' => 'menu-item' 
    ); 

    $categories = get_categories($args); 

    foreach ($categories as $category) { 

     echo '<h2>' . $category->name . '</h2>'; 

     $args['category'] = $category->term_id; 
     $posts = get_posts($args); ?> 

     <div class="menu-items-container"> 
      <?php foreach($posts as $post) { ?> 
       <?php $item_price = types_render_field("item-price"); ?> 
       <p><?php the_title(); ?>, <?php echo $item_price; ?></p> 
      <?php } ?> 
     </div> 
<?php } ?> 
+0

Grazie signore !!! –

Problemi correlati