Gesamtzahl der Beiträge nicht in ausgewählten Kategorien?

Ich muss die Gesamtzahl der Beiträge ermitteln, die nicht in ausgewählten Kategorien enthalten sind. Ich habe Kategorie-IDs der Kategorien, die ich von der Zählung ausschließen möchte (in der Variablen $folio_cat_ids )

Bisher habe ich diesen Code, der nicht funktioniert,

 $numposts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND post_name NOT LIKE '%revision%' AND post_name NOT LIKE '%autosave%' AND post_category NOT IN($folio_cat_ids)"); 

Bitte helfen Sie.

Solutions Collecting From Web of "Gesamtzahl der Beiträge nicht in ausgewählten Kategorien?"

Haben Ihre Beiträge mehrere Kategorien? Wenn nicht, denke ich, dass die Anzahl der einzelnen Kategorien zwischengespeichert wird.

 $categories = get_categories( array( 'exclude' => $folio_cat_ids ) ); $count = 0; foreach ( $categories as $category) $count += $category->category_count; 

Kann auch nur die Posts bekommen und zählen, das ist flexibler und kümmert sich um Überlappungen, aber auch ressourcenintensiver:

 $posts = get_posts( array( 'category__not_in' => $folio_cat_ids, 'numberposts' => '-1' ) ); $count = count( $posts ); 

Hallo @Rich :

Willkommen bei WordPress Antworten.

Das Feld 'post_category' wird nicht mehr verwendet und wurde durch eine Sammlung von “Taxonomie” 'post_category' ersetzt. Wenn Sie direktes SQL verwenden, würde es so aussehen:

 $sql = < <posts} INNER JOIN {$wpdb->term_relationships} ON {$wpdb->term_relationships}.object_id={$wpdb->posts}.ID INNER JOIN {$wpdb->term_taxonomy} ON {$wpdb->term_taxonomy}.term_taxonomy_id={$wpdb->term_relationships}.term_taxonomy_id WHERE 1=1 AND {$wpdb->posts}.post_status = 'publish' AND {$wpdb->posts}.post_type = 'post' AND {$wpdb->posts}.post_name NOT LIKE '%revision%' AND {$wpdb->posts}.post_name NOT LIKE '%autosave%' AND {$wpdb->term_taxonomy}.term_id NOT IN ($folio_cat_ids) SQL; $numposts = $wpdb->get_var($sql); 

Es ist jedoch eine gute Idee, die WordPress-API anstelle von Direct SQL zu verwenden, wenn Sie vermeiden können, viel SQL zu schreiben, wenn Sie die WordPress-API verwenden, was in diesem Fall sehr gut möglich ist. Ich habe eine kleine class für Sie namens CountPostsCategoriesNotIn die den 'posts_fields' Hook kapselt, den Sie verwenden müssen. Der Aufruf dieser class ist so einfach:

 $folio_cat_ids = '1,2,3'; $numposts = CountPostsCategoriesNotIn::count($folio_cat_ids); echo "$numposts\n"; 

Und hier ist die class, die Sie in die functions.php Datei Ihres Themes kopieren oder in der .php Datei eines Plugins verwenden können, das Sie vielleicht schreiben:

 class CountPostsCategoriesNotIn { static function count($categories) { $posts_fields = array(__CLASS__,'posts_fields'); add_action('posts_fields',$posts_fields); $query = new WP_Query(array( 'posts_per_page' => '-1', 'category__not_in' => $categories, )); remove_action('posts_fields',$posts_fields); return $query->post->post_count; } static function posts_fields($field_list) { $field_list = 'COUNT(*) as post_count'; return $field_list; } }