2017-05-16 7 views
0

Ich habe eine Website geerbt und der Code, den ich derzeit habe, scheint die erste Kategorie, beurteilt nach alphabetischer Reihenfolge, denke ich, auf die Post-Schleife eines benutzerdefinierten Beitrags zu zeigen ...Zeige übergeordnete Kategorie anstelle der ersten Kategorie - Wordpress

ich habe diesen Code, der durch Kategorienamen und den Titel der Post ziehen:

class SeedPost { 

    public $post_id; 
    public $post_type; 

    function __construct($post_id) { 
     $this->post_id = $post_id; 
     $this->post_type = get_post_type($this->post_id); 
    } 

    function display($twocol = false) { 
     global $post; 

     $post = get_post($this->post_id); 

     $cols = $twocol ? 'two' : 'three'; 

     setup_postdata($post); 

     if($this->post_type == 'portfolio') { 
      $overlay_class = 'item__overlay--portfolio'; 
     } else { 
      $overlay_class = 'item--cat-' . SeedHelpers::first_category(); 
     } 
     ?> 
     <a href="<?php the_permalink(); ?>"> 
     <div class="item item--<?php echo $cols; ?>"> 
      <?php 
      if(has_post_thumbnail()) { 
       the_post_thumbnail('news-archive', array('class' => 'item--three__child')); 
      } 
      ?> 

       <div class="item__overlay <?php echo $overlay_class; ?>"> 
        <span class="item__cat-title item__cat-title--overlay"><?php echo SeedHelpers::first_category($this->post_type); ?></span> 
        <?php get_cat_name($cat_id) ?> 
        <h4 class="item__title"><?php the_title(); ?></h4> 
        <!-- <?php the_excerpt(); ?> --> 
        </div> 
       </div> 

     </div> 
     </a> 
     <?php 
     wp_reset_postdata(); 
    } 

Das Stück Code werden Sie feststellen, ist:

SeedHelpers::first_category($this->post_type) 

Dies entspricht einem functi bezieht Ich glaube, das wird die erste Kategorie dieses Posts anzeigen.

Diese Funktion ist hier:

static function first_category($post_type = 'post') { 
     if($post_type == 'post') { 
      $category = get_the_category(); 

      if($category) { 
       return $category[0]->cat_name; 
      } 

      return false; 
     } elseif($post_type == 'portfolio') { 
      $category = get_the_terms(get_the_ID(), 'portfolio-category'); 

      if($category) { 
       return $category[0]->name; 
      } 

      return false; 
     } 
    } 

Jeder meiner Beiträge haben eine Hauptkategorie und mehrere untergeordnete Kategorien, ich möchte den Code ändern, so dass es die Mutterunterkategorie zeigt nur ...

Ich habe die meisten Dinge ausprobiert, die ich online gefunden habe, aber ich kann es nicht richtig anzeigen lassen ...

EDIT >>>>>>>> Ich habe auch dieses Bit Code unter dem Bit oben - nicht Sicher, ob das etwas damit zu tun hat?

static function category_shorthand() { 
     $category = get_the_terms(get_the_ID(), 'portfolio-category'); 

     if($category) { 
      $category_id = $category[0]->term_id; 
      $shorthand = get_field('shorthand', 'portfolio-category_' . $category_id); 

      if($shorthand) { 
       return $shorthand; 
      } 

      return $category[0]->name; 
     } 

     return false; 
    } 

Die Seite ist hier: http://ideedev.co.uk/newseed/portfolio/ und zeigt die Kategorie in dem Überschlag auf einem Portfolioelement verpackt ...

+0

versuchen '$ category [0] -> category_parent' – RST

+0

Danke @RST Wo würde ich das hinzufügen? –

+0

'$ category [0] -> category_parent' kommt anstelle von' $ category [0] -> name' – RST

Antwort

0

Soweit ich die Dokumentation zu lesen, get_the_category sollte einen Array von WP_Term Objekten zurück, das enthält eine öffentliche Variable namens parent (die die ID des übergeordneten Elements enthalten).

Sie sollten in der Lage sein, diese Variable zu verwenden, um den übergeordneten Kategorienamen zu erhalten, indem Sie die Methode get_the_category_by_ID() mit der übergeordneten ID als Parameter aufrufen. So erhalten Sie:

if($category) { 
    $parentId = $category[0]->parent; // contains the parent category ID 
    return get_the_category_by_ID($parentId); // Returns the name of the category 
} 

statt

if($category) { 
    return $category[0]->cat_name; 
} 

Docs:

+0

Danke dafür @Erik - Es scheint nichts zu tun - welche dieser Schnipsel muss ich ersetzen ? Ich habe beides und eins nach dem anderen versucht und es funktioniert immer noch nicht - Vielleicht fehlt etwas? –

+0

Ich habe gerade den Beitrag mit einem anderen Code, den ich gefunden habe aktualisiert - Nicht sicher, dass es etwas mit den Kategorien zu tun hat ... –

+0

Nun könnten Sie versuchen, Ihren Code durch 'echo' die Werte zu debuggen. Oder 'print_r ($ category)', so sehen Sie, was in dieser Variable ist. Etwas wie 'echo'

'; print_r($category); echo '
'', sollte Ihnen ein klares Ergebnis geben.Von dort sollten Sie sehen, ob die Elternvariable irgendeinen Wert usw. enthält. –

Verwandte Themen