Beiträge ausschließlich in ihrer Kategorie anzeigen (nicht übergeordnet)

Ich verwende einen benutzerdefinierten Post-Typ, um PDF-Dokumente (Posts) auf meiner Website hinzuzufügen / anzuzeigen.

Taxonomie – wpl_documents_category

Beitragstyp – post_documents

Alles funktioniert gut. Allerdings möchte ich die Beiträge ausschließlich in ihrer Kategorie anzeigen – ob in einer Eltern- oder einer Kinderkategorie.

Beispiel unten

Hierarchie: Elternkatze -> Kinderkatze 1 -> Kinderkatze 2

Beitragsname: Dummy Doc

Beitrag Kategorie: Kind Katze 2

Standardmäßig zeigt WordPress diesen Beitrag in allen 3 Ebenen an. Was ich jedoch möchte, ist, dass es nur in der Kategorie angezeigt wird, zu der es gehört (Child Cat 2).

Abfrage unten

 have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> 

Ich kann das nicht herausfinden und habe verschiedene Methoden / Lösungen ausprobiert, aber ohne Erfolg.

Alle Ideen / Informationen zu den oben genannten wird sehr geschätzt!

BEARBEITEN

Vollständige Abfrage

  ID; $document_file = get_post_meta( $pid, 'wpl_document_file', true); $document_file_size = get_post_meta( $pid, 'wpl_document_file_size', true); $document_authors = get_post_meta( $pid, 'wpl_document_authors', true); ?> 

HTML Markup geht hier mit Anrufen, um die obigen Informationen zu echo

Kategorien anzeigen

 parent == 0) { ?> term_id); ?> 

Hier ist mein komplettes archive-post_documents.php

   

Description

taxonomy, array( 'parent' => $term->term_id, 'hide_empty' => 0, 'show_count' => 0 ) ); if($children) { ?>
parent == 0) { ?>

Browse Sub-categories:

    term_id); ?>

Browse Sub-categories:

    term_id); } ?>
 
have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> ID; $document_file = get_post_meta( $pid, 'wpl_document_file', true); $document_file_size = get_post_meta( $pid, 'wpl_document_file_size', true); $document_authors = get_post_meta( $pid, 'wpl_document_authors', true); $icon = wplook_get_icon_name($document_file); ?> <article id="post-" >
<a title="" href="https://wordpress.stackexchange.com/questions/170898/displaying-posts-exclusively-in-their-category-not-parent/" download="">
<a title="" href="https://wordpress.stackexchange.com/questions/170898/displaying-posts-exclusively-in-their-category-not-parent/" download=""> pdficon

<a title="" href="https://wordpress.stackexchange.com/questions/170898/displaying-posts-exclusively-in-their-category-not-parent/" download="">

<i class=""> Size:

Author(s):

Solutions Collecting From Web of "Beiträge ausschließlich in ihrer Kategorie anzeigen (nicht übergeordnet)"

Hier ist ein interessanter Ansatz dazu

KONZEPT

Wir benötigen eine Begriffsliste, in der die Beiträge unter dem spezifischen Begriff aufgelistet sind, aber unter Verwendung der herkömmlichen Methoden werden Beiträge unter den Begriffen der Eltern, Kinder und Enkel aufgeführt. Wir wollen nur Beiträge in der letzten Laufzeit auflisten, wenn es sich um ein Enkelkind handelt, dann sollte der Beitrag nur unter dem Begriff des Enkelkindes aufgeführt werden

PROBLEME MIT IHREM AKTUELLEN CODE

Da dies nur eine Archivseite ist, die nicht als Taxonomieseite verwendet wird, haben Sie hier einige schwerwiegende Fehler. Der folgende Code

 
< ?php if (category_description( $category ) == '') { ?> < ?php } else { ?>

Description

< ?php echo category_description( $category_id ); ?>
< ?php } ?> < ?php $term = get_queried_object(); $children = get_terms( $term->taxonomy, array( 'parent' => $term->term_id, 'hide_empty' => 0, 'show_count' => 0 ) ); if($children) { ?>
< ?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); if ($term->parent == 0) { ?>

Browse Sub-categories:

    < ?php wp_list_categories('taxonomy=wpl_documents_category&depth=1&title_li=&child_of=' . $term->term_id); ?>
< ?php } else { ?>

Browse Sub-categories:

    < ?php wp_list_categories('taxonomy=wpl_documents_category&&title_li=&child_of=' . $term->term_id); } ?>
< ?php } ?>
 

sollte gelöscht werden. Es führt zu einer großen Liste von Fehlern. Wenn Sie Debug aktivieren, werden Sie sehen, worüber ich spreche. Dieser Code funktioniert nur in einer Taxonomie- oder Kategorievorlage mit einigen Optimierungen oder wenn die Archivseite tatsächlich als Taxonomieseite mit dem richtigen bedingten Tag verwendet wird.

Arbeitsfluß

Dies ist eine sehr einfache Liste, die Begriffe in alphabetischer Reihenfolge auflistet, unabhängig von Eltern-, Kinder- oder Enkel-Begriff

Was wir tun müssen, ist, eine Liste aller Posts für den spezifischen Post-Typ in dem Archiv zu erhalten, das für eine Taxonomie spezifisch ist. Dies wird mithilfe einer tax_query mit WP_Query . get_terms() wird verwendet, um eine Liste der Begriffe zu erhalten, die zu der angegebenen Taxonomie gehören. Dies wird in der tax_query , um die Posts zu erhalten.

Ich habe mich entschieden, eine function zu schreiben, die global verwendet werden kann, um die Begriffsliste anzuzeigen.

Wenn alle Beiträge zurückgegeben werden, müssen wir die Begriffe abrufen, zu denen jeder Beitrag gehört. Dafür nutzen wir get_the_terms()

Um Vorkehrungen für Beiträge zu treffen, die zu einem Eltern- und / oder usort und / oder Enkelkind-Begriff gehören, habe ich das zurückgegebene Feld von Begriffen mit usort nach Begriff ID sortiert, so dass der letzte Begriff in der Zeile zuerst erscheint. Dieser Begriff wird das Enkelkind oder Kind sein.

Ein Beitrag kann jedoch nicht zu zwei Begriffen auf derselben Ebene gehören, z. B. zwei untergeordnete Begriffe. Wenn das passiert, wird immer noch der Begriff mit der höchsten Benennungs-ID verwendet

Der erste Term im sortierten Array wird verwendet, um diese Liste zu erstellen und den Posttitel darunter hinzuzufügen

Dieses neue Array, das erstellt wird, wird mit ksort sortiert, so dass der Begriff Liste alphabetisch sortiert wird. Die Beiträge sind nach dem Veröffentlichungsdatum sortiert

Ich habe auch einen Übergang hinzugefügt, um die function schneller und weniger ressourcenintensiv zu machen. Diese Liste wird alle 24 Stunden aktualisiert, Sie können sie einfach nach Bedarf ändern und länger machen. Wählen Sie eine Zeitspanne, die der Häufigkeit entspricht, mit der Sie neue Posts hinzufügen. Wenn Sie wöchentlich neue Beiträge hinzufügen, müssen Sie die Übergangszeit einmal pro Woche ablaufen lassen

Um sicherzustellen, dass die Liste immer dann aktualisiert wird, wenn ein Beitrag gelöscht, veröffentlicht oder aktualisiert wird, wird die transition_post_status Aktion verwendet, um den Übergang zu löschen, sobald ein Beitrag veröffentlicht, gelöscht oder aktualisiert wird

LÄSST CODE

Hier ist der Code, füge das alles in deine functions.php ein

 function get_term_post_list( $taxonomy = 'category', $post_type = 'post' ) { if ( false === ( $q = get_transient( 'term_list' ) ) ) { $q = ''; $term_ids = get_terms( $taxonomy, 'fields=ids' ); if ( ! empty( $term_ids ) && ! is_wp_error( $term_ids ) ){ $args = array( 'posts_per_page' => -1, 'post_type' => $post_type, 'fields' => 'names', 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'field' => 'term_id', 'terms' => $term_ids, ), ), ); $query = new WP_Query($args); ?>< if( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); $a = '' . get_the_title() .''; $all_terms = get_the_terms( $query->post->ID, $taxonomy ); $terms = array_values( $all_terms ); usort( $terms, function ( $a, $b ) { return ($a->term_id < $b->term_id) ? 1 : -1; }); $b = ucfirst( $terms[0]->name ); $q[$b][] = $a; // Create an array with the category names and post titles } /* Restore original Post Data */ wp_reset_postdata(); } ksort( $q ); } set_transient( 'term_list', $q, 24 * HOUR_IN_SECONDS ); } return $q; } add_action( 'transition_post_status', function ( $new_status, $old_status, $post ) { delete_transient( 'term_list' ); }, 10, 3 ); 

WIE BENUTZT MAN

So wird der Code in Ihrer Vorlagendatei archive-post_documents.php

 $lists = get_term_post_list( $taxonomy = 'wpl_documents_category', $post_type = 'post_documents' ); foreach ($lists as $key=>$values) { echo $key; echo '
    '; foreach ($values as $value){ echo '
  • ' . $value . '
  • '; } echo '
'; }