Visa endast inlägg / media som ägs av inloggad WordPress-användare

Wordpress visar endast wordpress-inlägg och media som ägs av inloggad användare

Hur du inaktiverar visning av inlägg och media från andra WordPress-användare

Om du någonsin har arbetat på en WordPress-communitywebbplats som stöds av många utgivare, kanske du har märkt att även om du inte kan redigera andras inlägg, kan du fortfarande se titlarna på varje inlägg i WordPress-administratören. 

Det beror på att WordPress som standard låter författare se titlarna på varje publicerat inlägg, utkast och media.

I den här handledningen visar vi dig hur du inaktiverar visning av inlägg och media från andra användare.

Om du vill se fler knep som du kan använda med WordPress, se till att kolla in några av våra andra artiklar.

Innehåll[Show]

titlar visa inaktiverade

Kom ihåg att ta en WordPress-säkerhetskopia (använder dessa plugins) innan du fortsätter om något går sönder medan du justerar koden. 

1. Inaktivera visning av inlägg och media från andra WordPress-användare

Lägg till koden nedan i din functions.php-fil för att inaktivera visning av inlägg och media från andra användare.

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. Inaktivera visning av antalet WordPress-inlägg

Som nämnts inaktiverar ovanstående kod endast visning av titlar på andras inlägg i WordPress-instrumentpanelen.

Problemet är att det inte kommer att inaktivera visning av inläggsräkningarna i "alla inlägg", "utkast", "papperskorgen" och "väntande" filterfält. Om du också vill fixa antalet inlägg i filterfältet, lägg till nedanstående kodavsnitt i ditt temas funktioner.php-fil.

Observera att koden nedan fungerar endast om den används tillsammans med den ovan angivna koden.

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. Åtgärda medieantal

Om du också vill inaktivera medieantalet lägger du till koden nedan i din functions.php-fil. För att få den här koden att fungera, se till att du också lägger till den första koden, det vill säga koden som inaktiverar visning av inlägg och media från andra användare. 

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

 Och att mina damer och herrar är ett kodhack som låter dig bara visa inlägg och media för den för närvarande inloggade WordPress-användaren.

Kontrollera om en användare är inloggad på WordPress

I kodjusteringen ovan behövde vi kontrollera om en användare kunde redigera inlägg. Men om du vill kontrollera om en användare är inloggad i WordPress via kod kan du använda följande kod:

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

Å andra sidan, om du letar efter ett enkelt sätt att veta om en användare är inloggad i backend, kan du använda följande plugin: WPForce-utloggning eller vem är inloggad plugin.

wp tvinga utloggning för att se om användare är inloggade

 

Behöver du hjälp med att göra saker? Prova dessa topprankade prisvärda spelningar på Fiverr!

fiverr-logotyp

Klicka här att hitta experter på fixa WordPress-problem.

Klicka här att skapa en hela WordPress-webbplatsen.

 

 
Ladda ner listan över 101 WordPress-trick som alla bloggare borde veta

101 WordPress-tricks

Klicka här för att ladda ner nu
 
Om författaren
David Attard
Författare: David Attardwebbplats: https://www.linkedin.com/in/dattard/
David har arbetat i eller runt online / digital industrin under de senaste 18 åren. Han har stor erfarenhet av mjukvaru- och webbdesignindustrin med WordPress, Joomla och nischer som omger dem. Som digital konsult fokuserar han på att hjälpa företag att få en konkurrensfördel med en kombination av deras webbplats och digitala plattformar som finns idag.

En sak till... Visste du att människor som delar användbara saker som det här inlägget ser fantastiska ut också? ;-)
Tveka inte, lämna en användbara kommentera med dina tankar, dela sedan detta på din Facebook-grupp (er) som skulle tycka att det var användbart och låt oss skörda fördelarna tillsammans. Tack för att du delade och var trevlig!

Upplysningar: Denna sida kan innehålla länkar till externa webbplatser för produkter som vi älskar och rekommenderar helhjärtat. Om du köper produkter vi föreslår kan vi tjäna en remissavgift. Sådana avgifter påverkar inte våra rekommendationer och vi accepterar inte betalningar för positiva recensioner.

Författare Utvalda på:  Inc Magazine-logotyp   Sitepoint-logotyp   CSS Tricks-logotyp    webbdesignerdepot-logotyp   WPMU DEV-logotyp   och många fler ...