it-swarm.com.de

Benutzerdefinierte Taxonomie-Vorlage funktioniert nicht mit einfacher Schleife. Mehrere CPT mit derselben Taxonomie

Ich benötige Hilfe bei WP benutzerdefinierten Taxonomien und benutzerdefinierten Beitragstypen. Bisher habe ich keine funktionierende Lösung gefunden. Bitte entschuldigen Sie, wenn dies eine einfache Lösung hat. Ich habe mein Bestes gegeben, um zuerst überall eine Lösung zu finden.

Erläuterung der Ausgabe -

  1. Ich habe eine Taxonomie namens "Abteilung" .
  2. Ich habe 3 CPT genannt "Kurs", "Fakultät", "Bibliothek" .

Alle 3 CPT verwenden dieselbe Taxonomie "Abteilung" . Ich habe alle Einstellungen erfolgreich vorgenommen und allen 3 CPT die Taxonomie "Abteilung" zugewiesen.

Jetzt versuche ich, Posts (alle 3 CPT-Posts) nach "Abteilung" -Taxonomie anzuzeigen terms (z. B. habe ich die Begriffe "x", "y", "z" für die Taxonomie "department") . Ich habe eine Vorlagendatei namens "taxonomy-department.php" , die eine einfache Schleife hat -

<?php if (have_posts()) : ?>

        <ul> 

        <?php while (have_posts()) : the_post(); ?> 
            <li>
                <?php the_title(); ?>
            </li>
        <?php endwhile; ?>

        </ul>
        <?php else : ?>

        <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>

<?php endif; ?>

Die obige Schleife in der Taxonomie-Vorlage funktioniert nicht und zeigt keine Beiträge an. Ich gehe einfach zu einer anderen Aussage. Ich bin mir nicht sicher, wie ich das erreichen soll.

Ist es auch möglich, Beiträge nach CPT zu filtern, wenn ich sie (mit Ihrer Hilfe) erfolgreich abrufe? (in der Taxonomie-Vorlagendatei)

Jede Hilfe wird sehr geschätzt.

2
Amit

WP zeigt standardmäßig normale native Posts in Archiven an. Es wird nicht automatisch die welche Post-Typen in Ihr Archiv aufnehmen, die Sie möchten.

Sie müssen die Hauptabfrage dafür anpassen, um das zu erklären, mit etwas wie:

add_action( 'pre_get_posts', function ( WP_Query $query ) {

    if ( $query->is_main_query() && $query->is_tax( 'department' ) ) {
        $query->set( 'post_type', [ 'course', 'faculty', 'library' ] );
    }
} );
1
Rarst

Bitte versuchen Sie dies-

$post_type = array('course', 'faculty', 'library');
$terms = array( 'x-tax-slug', 'y-tax-slug', 'z-tax-slug' );
$args = array(
    'post_type' => $post_type,
    'tax_query' => array(
        array(
            'taxonomy' => 'department',
            'field'    => 'slug',
            'terms'    => $terms,
        ),
    ),
);
$query = new WP_Query( $args );

<?php if (have_posts()) : ?>

        <ul> 

        <?php while ($query->have_posts()) : $query->the_post(); ?> 
            <li>
                <?php the_title(); ?>
            </li>
        <?php endwhile; ?>

        </ul>
        <?php else : ?>

        <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>

<?php endif; ?>

<?php wp_reset_postdata(); // reset the query ?>

Daher führen wir hier eine benutzerdefinierte Abfrage basierend auf Ihrer department-Taxonomie und dem benutzerdefinierten Beitragstyp aus. Und endlich setzen wir die Abfrage zurück.

0
CodeMascot

Ich danke @Rarst für seinen Beitrag zur Antwort. Hier ist das letzte Stück Code -

add_action( 'pre_get_posts', 'my_tax_query' );

function my_tax_query($query){

    if ( !is_admin() && $query->is_main_query() && $query->is_tax( 'department' ) ) {
        $query->set( 'post_type', array( 'course', 'faculty', 'library' ) );
    }
};

Fügen Sie den Code in die Datei functions.php ein. Dadurch werden alle Posts (für die Term-Seite) für alle von Ihnen verwendeten Post-Typen abgerufen.

Zum Beispiel - wenn Ihre Begriffsseite http://domain-name.com/taxonomy/term1/ ist, erhalten Sie alle Beiträge für "term1" für alle Beitragstypen.

Können wir nun Beiträge nach "Beitragstypen" filtern? Gibt es eine Möglichkeit, das zu tun? Vielen Dank!

0
Amit