Mostrar apenas postagens / mídia pertencentes a usuário logado do WordPress

Wordpress mostra apenas postagens e mídia do usuário conectado

Como desativar a exibição de postagens e mídia de outros usuários do WordPress

Se você já trabalhou em um site de comunidade do WordPress apoiado por muitos editores, deve ter notado que, embora não possa editar as postagens de outras pessoas, você ainda pode ver os títulos de cada postagem dentro do administrador do WordPress. 

É porque, por padrão, o WordPress permite que os autores vejam os títulos de cada postagem, rascunho e mídia publicada.

Neste tutorial, mostraremos como desabilitar a exibição de postagens e mídia de outros usuários.

Se você quiser ver mais truques que pode usar com o WordPress, verifique alguns de nossos outros artigos.

Conteúdo[Mostrar]

visualização de títulos desativada

Lembre-se de fazer um backup do WordPress (usando esses plugins) antes de prosseguir, caso algo quebre durante o ajuste do código. 

Saiba mais sobre o uso WP_Query para tipos de postagem personalizados.

1. Desative a exibição de postagens e mídia de outros usuários do WordPress

Adicione o código abaixo ao seu arquivo functions.php para desabilitar a exibição de postagens e mídia de outros usuários.

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');
 }
}

2. Desative a exibição de contagens de postagens do WordPress

Conforme mencionado, o código fornecido acima apenas desabilitará a exibição de títulos de postagens de outras pessoas dentro do painel do WordPress.

O problema é que ele não desativa a exibição da contagem de postagens nas barras de filtro 'todas as postagens', 'rascunhos', 'lixo' e 'pendentes'. Se você gostaria de corrigir a contagem de postagens nas barras de filtro também, adicione o trecho de código abaixo ao arquivo functions.php do seu tema.

Observe que o código abaixo funcionará apenas se for usado junto com o código fornecido acima.

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(__('<a href="/pt/%s"'. $class .'>All <span class="count">(%d)</span></a>', 'all'),
        admin_url('edit.php?post_type=post'),
        $result->found_posts);

    elseif( $type['status'] == 'publish' ):

      $class = ($wp_query->query_vars['post_status'] == 'publish') ? ' class="current"' : '';
      $views['publish'] = sprintf(__('<a href="/pt/%s"'. $class .'>Published <span class="count">(%d)</span></a>', 'publish'),
        admin_url('edit.php?post_status=publish&post_type=post'),
        $result->found_posts);

    elseif( $type['status'] == 'draft' ):

       $class = ($wp_query->query_vars['post_status'] == 'draft') ? ' class="current"' : '';
       $views['draft'] = sprintf(__('<a href="/pt/%s"'. $class .'>Draft'. ((sizeof($result->posts) > 1) ? "s" : "") .' <span class="count">(%d)</span></a>', 'draft'),
         admin_url('edit.php?post_status=draft&post_type=post'),
         $result->found_posts);

    elseif( $type['status'] == 'pending' ):

        $class = ($wp_query->query_vars['post_status'] == 'pending') ? ' class="current"' : '';
        $views['pending'] = sprintf(__('<a href="/pt/%s"'. $class .'>Pending <span class="count">(%d)</span></a>', 'pending'),
          admin_url('edit.php?post_status=pending&post_type=post'),
          $result->found_posts);

    elseif( $type['status'] == 'trash' ):

        $class = ($wp_query->query_vars['post_status'] == 'trash') ? ' class="current"' : '';
        $views['trash'] = sprintf(__('<a href="/pt/%s"'. $class .'>Trash <span class="count">(%d)</span></a>', 'trash'),
          admin_url('edit.php?post_status=trash&post_type=post'),
          $result->found_posts);

    endif;
  }
 
  return $views;
}

3. Corrigir contagens de mídia

Se você deseja desabilitar as contagens de mídia também, adicione o código abaixo ao seu arquivo functions.php. Para que esse código funcione, certifique-se de adicionar também o primeiro código, ou seja, o código que desabilita a exibição de postagens e mídias de outros usuários. 

function fix_media_counts($views) {
  global $wpdb, $current_user, $post_mime_types, $avail_post_mime_types;
  $views = array();
  $_num_posts = 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 < 1

    ");

  $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts));
 
  foreach ( $matches as $type => $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'] = "<a href='upload.php'$class>" . sprintf( __('All <span class="count">(%s)</span>', 'uploaded files' ), number_format_i18n( $_total_posts )) . '</a>';

   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] = "<a href='upload.php?post_mime_type=$mime_type'$class>" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), $num_posts[$mime_type] ) . '</a>';

  }

 $views['detached'] = '<a href="/pt/upload.php?detached=1"' . ( $detached ? ' class="current"' : '' ) . '>' . sprintf( __( 'Unattached <span class="count">(%s)</span>', 'detached files' ), $total_orphans ) . '</a>';

 return $views;
}

 E isso, senhoras e senhores, é um hack de código que permite a você mostrar apenas as postagens e a mídia do usuário do WordPress conectado no momento.

Verifique se um usuário está logado no WordPress

No ajuste de código acima, precisamos verificar se um usuário foi capaz de editar postagens. Mas se quiser verificar se um usuário está logado no WordPress via código, você pode usar o seguinte código:

if ( is_user_logged_in() ) {
    echo 'Welcome, registered user!';
} else {
    echo 'Welcome, visitor!';
};
 

Por outro lado, se você está procurando uma maneira simples de saber se um usuário está logado no back-end, pode usar o seguinte plugin: Logout do WPForce ou o plugin Quem está conectado.

wp força o logout para ver se os usuários estão logados

 

Precisa de ajuda para fazer as coisas? Experimente esses shows acessíveis com melhor classificação no Fiverr!

logotipo da fiverr

Clique aqui para encontrar especialistas em corrigindo problemas do WordPress.

Clique aqui para criar um site WordPress completo.

 

 
Baixe a lista de 101 truques do WordPress que todo blogueiro deve saber

101 truques do WordPress

Clique aqui para baixar agora
 
Sobre o autor
David Attard
David trabalha na indústria online e digital ou em torno dela há 21 anos. Ele tem vasta experiência nas indústrias de software e web design usando WordPress, Joomla e nichos que os cercam. Ele trabalhou com agências de desenvolvimento de software, empresas internacionais de software, agências de marketing locais e agora é Chefe de Operações de Marketing na Aphex Media – uma agência de SEO. Como consultor digital, seu foco é ajudar as empresas a obter uma vantagem competitiva usando uma combinação de seus sites e plataformas digitais disponíveis atualmente. Sua combinação de experiência em tecnologia combinada com uma forte visão de negócios traz uma vantagem competitiva aos seus escritos.

Mais uma coisa... Você sabia que as pessoas que compartilham coisas úteis como esta postagem também parecem FANTÁSTICAS? ;-)
. deixe um útil comente com suas ideias, depois compartilhe com seu (s) grupo (s) do Facebook, que considerariam isso útil e vamos colher os benefícios juntos. Obrigado por compartilhar e ser legal!

Divulgação: Esta página pode conter links para sites externos de produtos que amamos e recomendamos de todo o coração. Se você comprar produtos que sugerimos, podemos receber uma taxa de referência. Essas taxas não influenciam nossas recomendações e não aceitamos pagamentos por análises positivas.

Autor (es) em destaque em:  Logotipo da revista Inc   Logotipo do Sitepoint   Logotipo do CSS Tricks    logotipo do webdesignerdepot   Logotipo WPMU DEV   e muitos mais ...