Dopo aver consultato esperti in materia, programmatori di diversi rami e professori, abbiamo trovato la risposta alla domanda e la lasciamo riflessa in questa pubblicazione.
Conta il numero di post di un tipo di post e se l'utente ha i permessi per visualizzarli.
Descrizione
Questa funzione fornisce un metodo efficiente per trovare la quantità di post di un blog. Un altro metodo consiste nel contare la quantità di elementi in get_posts(), ma questo metodo comporta un notevole overhead. Pertanto, quando si sviluppa per la versione 2.5+, utilizzare questa funzione.
Il parametro $perm controlla il valore 'readable' e se l'utente può leggere i post privati, lo mostrerà per l'utente che ha effettuato l'accesso.
Parametri
- $tipo
-
(stringa)(Opzionale) Tipo di post per recuperare il conteggio.
Valore predefinito: "post".
- $perm
-
(stringa)(Opzionale) 'leggibile' o vuoto.
Valore predefinito: ''
Ritorno
(oggetto) Numero di messaggi per ogni stato.
Fonte
File: wp-includes/post.php
functionwp_count_posts($type='post',$perm=''){global$wpdb;if(!post_type_exists($type)){returnnewstdClass;}$cache_key=_count_posts_cache_key($type,$perm);$counts=wp_cache_get($cache_key,'counts');if(false!==$counts){// We may have cached this before every status was registered.foreach(get_post_stati()as$status){if(!isset($counts->{$status})){$counts->{$status}=0;}}/** This filter is documented in wp-includes/post.php */returnapply_filters('wp_count_posts',$counts,$type,$perm);}$query="SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s";if('readable'===$perm&&is_user_logged_in()){$post_type_object=get_post_type_object($type);if(!current_user_can($post_type_object->cap->read_private_posts)){$query.=$wpdb->prepare(" AND (post_status != 'private' OR ( post_author = %d AND post_status = 'private' ))",get_current_user_id());}}$query.=' GROUP BY post_status';$results=(array)$wpdb->get_results($wpdb->prepare($query,$type),ARRAY_A);$counts=array_fill_keys(get_post_stati(),0);foreach($resultsas$row){$counts[$row['post_status']]=$row['num_posts'];}$counts=(object)$counts;wp_cache_set($cache_key,$counts,'counts');/** * Modify returned post counts by status for the current post type. * * @since 3.7.0 * * @param object $counts An object containing the current post_type's post * counts by status. * @param string $type Post type. * @param string $perm The permission to determine if the posts are 'readable' * by the current user. */returnapply_filters('wp_count_posts',$counts,$type,$perm);}
Correlato
Utilizzi
Usi | Descrizione |
---|---|
wp-includes/capabilities.php: current_user_can() |
Restituisce se l'utente corrente ha la capacità specificata. |
wp-includes/cache.php: wp_cache_get() |
Recupera il contenuto della cache per chiave e gruppo. |
wp-includes/cache.php: wp_cache_set() |
Salva i dati nella cache. |
wp-includes/pluggable.php: is_user_logged_in() |
Determina se il visitatore corrente è un utente connesso. |
wp-includes/plugin.php: applica_filtri() |
Richiama le funzioni di callback che sono state aggiunte a un gancio per filtri. |
wp-includes/user.php: get_current_user_id() |
Ottiene l'ID dell'utente corrente |
wp-includes/post.php: _count_posts_cache_key() |
Restituisce la chiave di cache per wp_count_posts() in base agli argomenti passati. |
wp-includes/post.php: wp_count_posts |
Modifica il conteggio dei post restituiti in base allo stato per il tipo di post corrente. |
wp-includes/post.php: post_type_exists() |
Determina se un tipo di post è registrato. |
wp-includes/post.php: get_post_stati() |
Ottiene un elenco di stati dei post. |
wp-includes/post.php: get_post_type_object() |
Recupera un oggetto di tipo post per nome. |
wp-includes/wp-db.php: wpdb::get_results() |
Recupera un intero insieme di risultati SQL dal database (cioè molte righe). |
wp-includes/wp-db.php: wpdb::prepare() |
Prepara una query SQL per un'esecuzione sicura. |
Utilizzato da
Usato da | Descrizione |
---|---|
wp-admin/includes/dashboard.php: wp_dashboard_right_now() |
Widget della dashboard che mostra alcune statistiche di base sul sito. |
wp-admin/includes/post.php: get_available_post_statuses() |
Ottenere tutti gli stati possibili per un tipo di post |
wp-admin/includes/class-wp-posts-list-table.php: WP_Posts_List_Table::get_views() | |
wp-admin/includes/class-wp-posts-list-table.php: WP_Posts_List_Table::prepare_items() |
Changelog
Versione | Descrizione |
---|---|
2.5.0 | Introdotto. |
Ricorda che hai la possibilità di chiarire la tua esperienza se hai trovato la risposta.