it-swarm.com.de

fragen Sie mehrere Taxonomien ab und zeigen Sie die Anzahl der Posts an

Ich habe den benutzerdefinierten Beitragstyp "Produkt" und 2 benutzerdefinierte Taxonomien "Kategorie" und "Produktstatus".

Ich versuche, Kategorien in Seitenvorlagen aufzulisten und zu zeigen, wie viele Produkte insgesamt in der Kategorie vorhanden sind und wie viele davon den Status "Verfügbar" haben.

Etwas wie das

Kategorie | Anzahl der Produkte | Produkte zur Verfügung

Kann jemand zeigen, wie man Posts erhält, die einer bestimmten Kategorie angehören und einen bestimmten Statuswert aus einer anderen Taxonomie haben?.

2
Rajeev Vyas

Ich bin sicher, dass eine benutzerdefinierte SQL-Abfrage viel besser funktionieren würde, aber hier ist eine Option mit den verfügbaren WordPress-Tools

//first get all categories
$categories = get_terms( 'category', array(
    'orderby'    => 'count',
));

//then create an array for easier processing
foreach ( $categories as $cat ) {
       $slugs[] = $cat->slug;
       $counts[$cat->slug]['count'] = $cat->count;
}

//then loop over the categories and for each one create a "query" to count the number of available products
foreach($slugs as $term){
    $products = get_posts(array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => array( $term)
            ),
            array(
                'taxonomy' => 'product_status',
                'field' => 'slug',
                'terms' => array( "available"),
                'operator' => 'NOT IN',
            )
        )   
    ));
    $counts[$term]['available'] = count($products);
}

//then all the is left is to print everyting Out
if (count($counts) > 0){
    echo '<table><tr><td>Category</td><td>No. of products</td><td>Products available</td></tr>';
    foreach ($counts as $key => $val){
        echo '<tr><td>'.$key.'</td><td>'.$var['count'].'</td><td>'.$var['available'].'</td></tr>';
    }
    echo '</table>';
}
2
Bainternet