Pokaż tylko posty / multimedia należące do zalogowanego użytkownika WordPress

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

Jak wyłączyć wyświetlanie postów i mediów innych użytkowników WordPress?

Jeśli kiedykolwiek pracowałeś w witrynie społeczności WordPress obsługiwanej przez wielu wydawców, być może zauważyłeś, że nawet jeśli nie możesz edytować postów innych osób, nadal możesz wyświetlać tytuły każdego postu w panelu administratora WordPress. 

Dzieje się tak, ponieważ domyślnie WordPress pozwala autorom zobaczyć tytuły każdego opublikowanego posta, wersji roboczej i multimediów.

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

Jeśli chcesz zobaczyć więcej sztuczek, których możesz użyć w WordPressie, zapoznaj się z innymi naszymi artykułami.

Contents [show] [Pokazać]

widok tytułów wyłączony

Pamiętaj, aby wykonać kopię zapasową WordPress (za pomocą tych wtyczek) przed kontynuowaniem na wypadek, gdyby coś się zepsuło podczas poprawiania kodu. 

1. Wyłącz pokazywanie postów i mediów innych użytkowników WordPress

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 liczników postów w WordPressie

Jak wspomniano, powyższy kod wyłączy tylko wyświetlanie tytułów postów innych osób w panelu WordPressa.

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

Należy pamiętać, że poniższy kod będzie działał tylko wtedy, gdy zostanie użyty wraz z powyższym kodem.

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="%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="%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="%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="%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="%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 liczniki mediów

Jeśli chcesz również wyłączyć liczniki multimediów, dodaj poniższy kod do pliku functions.php. Aby ten kod działał, upewnij się, że dodałeś również pierwszy kod, czyli ten, który uniemożliwia pokazywanie 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="upload.php?detached=1"' . ( $detached ? ' class="current"' : '' ) . '>' . sprintf( __( 'Unattached <span class="count">(%s)</span>', 'detached files' ), $total_orphans ) . '</a>';

 return $views;
}

 A to panie i panowie to zhakowanie kodu, które pozwala wyświetlać tylko posty i media aktualnie zalogowanego użytkownika WordPress.

Sprawdź, czy użytkownik jest zalogowany na WordPressie

W powyższym dostosowaniu kodu musieliśmy sprawdzić, czy użytkownik był w stanie edytować posty. Ale jeśli chcesz sprawdzić, czy użytkownik jest zalogowany do WordPressa 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 na sprawdzenie, czy użytkownik jest zalogowany w backendzie, możesz użyć następującej wtyczki: Wyloguj się z WPForce lub Wtyczka Kto jest zalogowany.

wp force wyloguj się, 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 strona WordPress.

 

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

101 sztuczek WordPress

Kliknij tutaj, aby pobrać teraz
 
O autorze
David Attard
Autor: David AttardStrona internetowa: https://www.linkedin.com/in/dattard/
David pracuje w branży online / cyfrowej lub w jej pobliżu od 18 lat. Ma ogromne doświadczenie w branży oprogramowania i projektowania stron internetowych przy użyciu WordPress, Joomla i otaczających je nisz. Jako konsultant ds. Cyfrowych koncentruje się na pomaganiu firmom w uzyskaniu przewagi konkurencyjnej za pomocą połączenia ich strony internetowej i dostępnych obecnie platform cyfrowych.

Jeszcze jedna rzecz... Czy wiesz, że osoby, które udostępniają przydatne rzeczy, takie jak ten post, również wyglądają NIESAMOWITE? ;-)
Proszę zostaw użyteczny skomentuj swoje przemyślenia, a następnie udostępnij to na swoich grupach na Facebooku, które uznają to za przydatne i wspólnie zbierzmy korzyści. Dziękuję za udostępnienie i bycie miłym!

Ujawnienie: Ta strona może zawierać linki do zewnętrznych witryn produktów, które kochamy i gorąco polecamy. Jeśli kupisz sugerowane przez nas produkty, możemy otrzymać opłatę za polecenie. Takie opłaty nie wpływają na nasze rekomendacje i nie przyjmujemy płatności za pozytywne recenzje.

Autorzy promowani w:  Inc Czasopismo Logo .   Logo Sitepoint   Logo CSS Tricks    logo webdesignerdepot   Logo WPMU DEV   i wiele więcej ...