gleiche Taxonomie für mehrere Post-Typen: Wie kann man in einem bestimmten Post-Typ leer ausblenden?

Ich habe eine Taxonomie “Künstler” für zwei verschiedene benutzerdefinierte Post-Typen (“Projekt” und “Produkt”).

Ich muss eine Liste von “Künstlern” anzeigen, aber nur wenn sie verwandte “Produkte” haben, und nur wenn diese Produkte noch auf Lager sind.

$artists = get_terms( array( 'taxonomy' => 'artist', 'hide_empty' => 1, ) ); 

Dazu gehören Künstler, die “Projekte”, aber keine “Produkte” haben. Ist es möglich anzugeben, für welchen Post-Typ sich das Argument “hide_empty” beziehen soll?

EDIT Hier ist was ich bisher habe.

  /* Useful when one taxonomy applies to multiple post types source: http://wordpress.stackexchange.com/a/24074/82 */ function get_terms_by_post_type( $taxonomies, $post_types ) { global $wpdb; $query = $wpdb->prepare( "SELECT t.*, COUNT(*) from $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN $wpdb->term_relationships AS r ON r.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN $wpdb->posts AS p ON p.ID = r.object_id WHERE p.post_type IN('%s') AND tt.taxonomy IN('%s') GROUP BY t.term_id", join( "', '", $post_types ), join( "', '", $taxonomies ) ); $results = $wpdb->get_results( $query ); return $results; } $artists = get_terms_by_post_type( array('artist'), array('product')); //* if( !empty($artists) && !is_wp_error( $artists ) ){ // filter out out-of-stock products artists foreach($artists as $k=>$artist){ $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => -1, 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'artist', 'field' => 'id', 'terms' => array( $artist->term_id ) ), array( 'key' => '_stock_status', 'value' => 'instock' ) ) ); $query = new WP_Query($args); echo $artist->slug; pr($query->post_count); if($query->post_count<1){ unset($artists[$k]); } } } 

Es funktioniert fast, aber es werden keine Produkte ausverkauft.

Solutions Collecting From Web of "gleiche Taxonomie für mehrere Post-Typen: Wie kann man in einem bestimmten Post-Typ leer ausblenden?"

Dank dieser Antwort konnte ich das Licht sehen. Hier erfahren Sie, wie Sie Taxonomiebegriffe abfragen, die sich auf (Woocommerce) Produkte beziehen, die “auf Lager” sind. Es verwendet sowohl tax_query (um Produkt mit Taxonomie in Beziehung zu setzen) als auch meta_query (um out-of-stock-Produkte herauszufiltern).

 $artists = get_terms_by_post_type( array('artist'), array('product')); if( !empty($artists) && !is_wp_error( $artists ) ){ // filter out out-of-stock products artists foreach($artists as $k=>$artist){ $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => -1, 'meta_query' =>array( 'relation' => 'AND', array( 'key' => '_stock_status', 'value' => 'instock', 'compare' => '=' ) , array( 'key' => '_stock', 'value' => '0', 'compare' => '>' ) , array( 'key' => '_stock', 'value' => '', 'compare' => '!=' ) ), 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'artist', 'field' => 'id', 'terms' => array( $artist->term_id ) ), ) ); $query = new WP_Query($args); if($query->post_count<1){ unset($artists[$k]); } } } function get_terms_by_post_type( $taxonomies, $post_types ) { global $wpdb; $query = $wpdb->prepare( "SELECT t.*, COUNT(*) from $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN $wpdb->term_relationships AS r ON r.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN $wpdb->posts AS p ON p.ID = r.object_id WHERE p.post_type IN('%s') AND tt.taxonomy IN('%s') GROUP BY t.term_id", join( "', '", $post_types ), join( "', '", $taxonomies ) ); $results = $wpdb->get_results( $query ); return $results; }