Correção de contagem de postagem (Todos | Publicado | Rascunhos | Pendente | Lixeira) para tipo de postagem personalizado ao restringir para ver suas próprias postagens

Eu quero restringir os usuários no wordpress para ver seus próprios itens de postagem e mídia apenas. Seguindo as etapas indicadas no link abaixo, desenvolvi o plugin para restringir usuários para visualizar apenas as suas postagens e itens de mídia.

https://wordpress.stackexchange.com/a/34858/12615

// Show only posts and media related to logged in author add_action('pre_get_posts', 'query_set_only_author' ); function query_set_only_author( $wp_query ) { global $current_user; if( is_admin() && !current_user_can('edit_others_posts') ) { $wp_query->set( 'author', $current_user->ID ); add_filter('views_edit-post', 'fix_post_counts'); add_filter('views_upload', 'fix_media_counts'); } } // Fix post counts function fix_post_counts($views) { global $current_user, $wp_query; unset($views['mine']); $types = array( array( 'status' => NULL ), array( 'status' => 'publish' ), array( 'status' => 'draft' ), array( 'status' => 'pending' ), array( 'status' => 'trash' ) ); foreach( $types as $type ) { $query = array( 'author' => $current_user->ID, 'post_type' => 'post', 'post_status' => $type['status'] ); $result = new WP_Query($query); if( $type['status'] == NULL ): $class = ($wp_query->query_vars['post_status'] == NULL) ? ' class="current"' : ''; $views['all'] = sprintf( '%4$s (%3$d)', admin_url('edit.php?post_type=post'), $class, $result->found_posts, __('All') ); elseif( $type['status'] == 'publish' ): $class = ($wp_query->query_vars['post_status'] == 'publish') ? ' class="current"' : ''; $views['publish'] = sprintf( '%4$s (%3$d)', admin_url('edit.php?post_type=post'), $class, $result->found_posts, __('Publish') ); elseif( $type['status'] == 'draft' ): $class = ($wp_query->query_vars['post_status'] == 'draft') ? ' class="current"' : ''; $views['draft'] = sprintf( '%4$s (%3$d)', admin_url('edit.php?post_type=post'), $class, $result->found_posts, __('Draft') ); elseif( $type['status'] == 'pending' ): $class = ($wp_query->query_vars['post_status'] == 'pending') ? ' class="current"' : ''; $views['pending'] = sprintf( '%4$s (%3$d)', admin_url('edit.php?post_type=post'), $class, $result->found_posts, __('Pending') ); elseif( $type['status'] == 'trash' ): $class = ($wp_query->query_vars['post_status'] == 'trash') ? ' class="current"' : ''; $views['trash'] = sprintf( '%4$s (%3$d)', admin_url('edit.php?post_type=post'), $class, $result->found_posts, __('Trash') ); endif; } return $views; } // Fix media counts function fix_media_counts($views) { global $wpdb, $current_user, $post_mime_types, $avail_post_mime_types; $views = array(); $count = $wpdb->get_results( " SELECT post_mime_type, COUNT( * ) AS num_posts FROM $wpdb->posts WHERE post_type = 'attachment' AND post_author = $current_user->ID AND post_status != 'trash' GROUP BY post_mime_type ", ARRAY_A ); foreach( $count as $row ) $_num_posts[$row['post_mime_type']] = $row['num_posts']; $_total_posts = array_sum($_num_posts); $detached = isset( $_REQUEST['detached'] ) || isset( $_REQUEST['find_detached'] ); if ( !isset( $total_orphans ) ) $total_orphans = $wpdb->get_var(" SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_author = $current_user->ID AND post_status != 'trash' AND post_parent  $reals ) foreach ( $reals as $real ) $num_posts[$type] = ( isset( $num_posts[$type] ) ) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real]; $class = ( empty($_GET['post_mime_type']) && !$detached && !isset($_GET['status']) ) ? ' class="current"' : ''; $views['all'] = "" . sprintf( __('All (%s)', 'uploaded files' ), number_format_i18n( $_total_posts )) . ''; foreach ( $post_mime_types as $mime_type => $label ) { $class = ''; if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) ) continue; if ( !empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) ) $class = ' class="current"'; if ( !empty( $num_posts[$mime_type] ) ) $views[$mime_type] = "" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), $num_posts[$mime_type] ) . ''; } $views['detached'] = '' . sprintf( __( 'Unattached (%s)', 'detached files' ), $total_orphans ) . ''; return $views; } 

Funciona bem, mas a contagem de postagem não funciona para o tipo de postagem personalizado.

ie Tudo | Publicado | Rascunhos | Pendente | Lixo – as contagens para postagens personalizadas não funcionam.

Para o usuário como administrador, estas são as capturas de canvas para post_type = “post” e post_type = “gallery”

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Para o usuário como atuhor, estas são as capturas de canvas para post_type = “post” e post_type = “gallery”.

A contagem de postagem funciona bem para post_type = “post”, mas quando se trata de post_type = “galeria” na segunda captura de canvas, há um problema no

Todos | Publicado | Rascunhos | Pendente | Lixo | ,parte

Eu apliquei o código acima e obtive os resultados como dados na imagem abaixo, a contagem de posts é uma, mas nenhuma é exibida quando a publicação é de outro usuário.

O que eu quero corrigir é a contagem de mensagens !!!

Esta é a imagem na qual a contagem de postagem é 0 para post_type = “posts” que está correta e queria que fosse seguido para a galeria insira a descrição da imagem aqui

Esta é a imagem na qual a contagem de mensagens é 1 para post_type = “galeria”, o que é errado , pois deve ser 0 e deve ser seguido da mesma forma que no caso de posts. insira a descrição da imagem aqui

Solutions Collecting From Web of "Correção de contagem de postagem (Todos | Publicado | Rascunhos | Pendente | Lixeira) para tipo de postagem personalizado ao restringir para ver suas próprias postagens"

Você deve mudar:

 'post_type' => 'post', 

Para:

 'post_type' => 'your_custom_post_type_name', 

E toda a referência à publicação padrão. Além disso, você deve adicionar os filtros somente para a consulta principal ou pode acabar com problemas em consultas secundárias. Abaixo, um código de exemplo para o tipo de postagem personalizado da gallery . Eu estava tentando depurar o código que você publicou (tirado de algum), mas finalmente eu decidi publicar um código de trabalho que já uso, o que é muito mais limpo (não inclui o contador de mídia (uploads), mas, como seu Pergunta sugerida, você não tem problemas com isso).

 add_action( 'pre_get_posts', function( $query ) { //Note that current_user_can('edit_others_posts') check for //capability_type like posts, custom capabilities may be defined for custom posts if( is_admin() && ! current_user_can('edit_others_posts') && $query->is_main_query() ) { $query->set('author', get_current_user_id()); //For standard posts add_filter('views_edit-post', 'views_filter_for_own_posts' ); //For gallery post type add_filter('views_edit-gallery', 'views_filter_for_own_posts' ); //You can add more similar filters for more post types with no extra changes } } ); function views_filter_for_own_posts( $views ) { $post_type = get_query_var('post_type'); $author = get_current_user_id(); unset($views['mine']); $new_views = array( 'all' => __('All'), 'publish' => __('Published'), 'private' => __('Private'), 'pending' => __('Pending Review'), 'future' => __('Scheduled'), 'draft' => __('Draft'), 'trash' => __('Trash') ); foreach( $new_views as $view => $name ) { $query = array( 'author' => $author, 'post_type' => $post_type ); if($view == 'all') { $query['all_posts'] = 1; $class = ( get_query_var('all_posts') == 1 || get_query_var('post_status') == '' ) ? ' class="current"' : ''; $url_query_var = 'all_posts=1'; } else { $query['post_status'] = $view; $class = ( get_query_var('post_status') == $view ) ? ' class="current"' : ''; $url_query_var = 'post_status='.$view; } $result = new WP_Query($query); if($result->found_posts > 0) { $views[$view] = sprintf( ''.__($name).' (%d)', admin_url('edit.php?'.$url_query_var.'&post_type='.$post_type), $result->found_posts ); } else { unset($views[$view]); } } return $views; }