web-dev-qa-db-de.com

WP_Query ruft Beiträge von benutzerdefinierten Beiträgen nach Kategorie ab

ich habe ewig damit rumgespielt und aus irgendeinem Grund kann ich es nicht zum Laufen bringen.

Dies ist innerhalb der einzelnen Beitragsseite eines benutzerdefinierten Beitragstyps ...

Im Allgemeinen erhalte ich die Kategorie des kundenspezifischen Pfostentyps, indem ich das get_the_term benutze und dann foreach tue, um in eine Zeichenkette freundlich einzugeben.

Ich verwende dann eine WP_Query zum Abrufen, aber ich denke, ich habe die Logik falsch.

Das habe ich

// post types query
if ( have_posts() ) : while ( have_posts() ) :the_post();

// getting the categories
$categorynames = '';
$getcategory = get_the_terms($post->ID, 'custompostnamehere-categories');

foreach($getcategory as $t){ $categorynames .= $t->term_id.' ,';}

if (substr($categorynames, -1) == ',') {
$categorynames = substr($categorynames, 0, -1);
}

// end of post type query
endwhile; endif; wp_reset_query(); 

//starting new query to get related posts within the same categories
$args = array(
  'post_type' => 'custompostnamehere',
  'cat' => $categorynames,
  'posts_per_page' => 20
);
$q = new WP_Query($args);

// retrieving the data
while($q->have_posts()){

}

Könnte mich bitte jemand über meine falschen Taten aufklären.

Vielen Dank

1
Robert

Sie verwenden eine Kategorieabfrage für Ihre benutzerdefinierte Taxonomie. Es wird also nicht funktionieren, da es keine Kategorien mit solchen IDs gibt.

Sie sollten stattdessen tax_query verwenden.

// post types query
while ( have_posts() ) {
    the_post();

    // getting the categories
    $categoryIDs = array();  // it's much nicer than concatenated string
    $getcategory = get_the_terms($post->ID, 'custompostnamehere-categories');

    foreach($getcategory as $t) {
        $categoryIDs[] = $t->term_id;
    }

// end of post type query
}
// resetting query isn't needed - you will call your own query next

//starting new query to get related posts within the same categories
$args = array(
    'post_type' => 'custompostnamehere',
    'tax_query' => array(
        array( 
            'taxonomy' => 'yourcustomtaxonomy',
            'field' => 'id',
            'terms' => $categoryIDs
        )
    ),
    'posts_per_page' => 20
);
$q = new WP_Query($args);

// retrieving the data
while( $q->have_posts() ) {
    $q->the_post();
    ...
}
2