Wordpress pokazuje tylko posty i media WordPress należące do zalogowanego użytkownika

Jak wyłączyć wyświetlanie postów i multimediów innych użytkowników WordPressa

Jeśli kiedykolwiek pracowałeś na stronie społecznościowej WordPress obsługiwanej przez wielu wydawców, być może zauważyłeś, że chociaż nie możesz edytować postów innych osób, nadal możesz przeglądać tytuły wszystkich postów w panelu administracyjnym WordPress. 

Dzieje się tak, ponieważ WordPress domyślnie pozwala autorom zobaczyć tytuły wszystkich opublikowanych postów, wersji roboczych i multimediów.

W tym samouczku pokażemy Ci, jak wyłączyć wyświetlanie postów i multimediów innych użytkowników.

Jeśli chcesz poznać więcej sztuczek, które możesz wykorzystać w WordPressie, koniecznie przeczytaj nasze pozostałe artykuły.

{automatycznie}

widok tytułów wyłączony

Pamiętaj o wykonaniu kopii zapasowej WordPressa (używając tych wtyczek) zanim przejdziesz dalej, na wypadek gdyby coś uległo uszkodzeniu podczas modyfikowania kodu. 

Dowiedz się więcej o używaniu WP_Query dla niestandardowych typów wpisów.

1. Wyłącz wyświetlanie postów i multimediów innych użytkowników WordPressa

Dodaj poniższy kod do pliku functions.php, aby wyłączyć wyświetlanie postów i multimediów innych użytkowników.

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. Wyłącz wyświetlanie liczby postów WordPress

Jak wspomniano, podany powyżej kod wyłączy jedynie wyświetlanie tytułów wpisów innych osób w panelu WordPress.

Problem polega na tym, że nie wyłączy to wyświetlania liczby postów wewnątrz pasków filtrów „wszystkie posty”, „wersje robocze”, „kosz” i „oczekujące”. Jeśli chcesz naprawić liczbę postów również na paskach filtrów, dodaj poniższy fragment kodu do pliku functions.php swojego motywu.

Należy pamiętać, że poniższy kod będzie działał tylko jeśli zostanie użyty razem z kodem podanym powyżej.

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="/pl/%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="/pl/%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="/pl/%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="/pl/%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="/pl/%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. Napraw liczbę mediów

Jeśli chcesz również wyłączyć liczniki mediów, dodaj poniższy kod do pliku functions.php. Aby ten kod działał, upewnij się, że dodajesz również pierwszy kod, czyli kod, który wyłącza wyświetlanie postów i mediów innych użytkowników. 

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="/pl/upload.php?detached=1"' . ( $detached ? ' class="current"' : '' ) . '>' . sprintf( __( 'Unattached <span class="count">(%s)</span>', 'detached files' ), $total_orphans ) . '</a>';

 return $views;
}

 A oto, drogie panie i panowie, hack kodu, który pozwala wyświetlać tylko posty i multimedia aktualnie zalogowanego użytkownika WordPressa.

Sprawdź, czy użytkownik jest zalogowany w WordPressie

W powyższym poprawkowym kodzie musieliśmy sprawdzić, czy użytkownik mógł edytować posty. Ale jeśli chcesz sprawdzić, czy użytkownik jest zalogowany w WordPressie za pomocą kodu, możesz użyć następującego kodu:

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

Z drugiej strony, jeśli szukasz prostego sposobu, aby dowiedzieć się, czy użytkownik jest zalogowany w zapleczu, możesz użyć następującej wtyczki: Wyloguj WPForce lub wtyczka Kto jest zalogowany.

wp force logout aby sprawdzić czy użytkownicy są zalogowani

 

Potrzebujesz pomocy w załatwieniu spraw? Wypróbuj te najwyżej oceniane niedrogie koncerty na Fiverr!

logo piątki

Kliknij tutaj znaleźć ekspertów na temat naprawianie problemów z WordPressem.

Kliknij tutaj stworzyć pełna witryna WordPress.

 

 
Pobierz listę 101 sztuczek WordPress, które powinien znać każdy bloger

101 sztuczek WordPress

Kliknij tutaj, aby pobrać teraz