Alleen berichten / media weergeven die eigendom zijn van aangemelde WordPress-gebruiker

Wordpress toont alleen WordPress-berichten en media die eigendom zijn van de ingelogde gebruiker

Hoe de weergave van berichten en media van andere WordPress-gebruikers uit te schakelen

Als je ooit hebt gewerkt aan een WordPress-communitysite die door veel uitgevers wordt ondersteund, is het je misschien opgevallen dat, hoewel je de berichten van anderen niet kunt bewerken, je nog steeds de titels van elk bericht in de WordPress-beheerder kunt bekijken. 

Het is omdat WordPress standaard auteurs toestaat om de titels van elk gepubliceerd bericht, concepten en media te zien.

In deze zelfstudie laten we u zien hoe u het weergeven van berichten en media van andere gebruikers kunt uitschakelen.

Als je meer trucs wilt zien die je met WordPress kunt gebruiken, bekijk dan zeker enkele van onze andere artikelen.

Inhoud[Zichtbaar]

titels weergave uitgeschakeld

Vergeet niet om een ​​WordPress-back-up te maken (deze plug-ins gebruiken) voordat u doorgaat voor het geval er iets kapot gaat tijdens het aanpassen van de code. 

Meer informatie over het gebruik WP_Query voor aangepaste berichttypen.

1. Schakel het tonen van berichten en media van andere WordPress-gebruikers uit

Voeg de onderstaande code toe aan uw functions.php-bestand om het tonen van berichten en media van andere gebruikers uit te schakelen.

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. Weergave van WordPress-posttellingen uitschakelen

Zoals vermeld, zal de hierboven gegeven code alleen het weergeven van titels van berichten van anderen in het WordPress-dashboard uitschakelen.

Het probleem is dat het de weergave van het aantal berichten in de filterbalken 'alle berichten', 'concepten', 'prullenbak' en 'in behandeling' niet uitschakelt. Als je het aantal posts in de filterbalken ook wilt corrigeren, voeg dan het onderstaande codefragment toe aan het functions.php-bestand van je thema.

Houd er rekening mee dat de onderstaande code alleen werkt als deze samen met de hierboven gegeven code wordt gebruikt.

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="/nl/%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="/nl/%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="/nl/%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="/nl/%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="/nl/%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. Mediatellingen corrigeren

Als u ook de mediatellingen wilt uitschakelen, voegt u de onderstaande code toe aan uw functions.php-bestand. Om deze code te laten werken, moet u ervoor zorgen dat u ook de eerste code toevoegt, dat wil zeggen de code die het weergeven van berichten en media van andere gebruikers uitschakelt. 

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

 return $views;
}

 En die dames en heren is een codehack waarmee je alleen de berichten en media van de momenteel ingelogde WordPress-gebruiker kunt laten zien.

Controleer of een gebruiker is ingelogd op WordPress

In de bovenstaande code-tweak moesten we controleren of een gebruiker berichten kon bewerken. Maar als je wilt controleren of een gebruiker via code in WordPress is ingelogd, kun je de volgende code gebruiken:

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

Aan de andere kant, als u op zoek bent naar een eenvoudige manier om te weten of een gebruiker is ingelogd in de backend, kunt u de volgende plug-in gebruiken: WPForce Uitloggen of Wie is ingelogd plug-in.

wp force logout om te zien of gebruikers zijn ingelogd

 

Hulp nodig om dingen voor elkaar te krijgen? Probeer deze best beoordeelde betaalbare optredens op Fiverr!

fiverr-logo

Klik hier om experts te vinden WordPress-problemen oplossen.

Klik hier om een ​​te maken volledige WordPress website.

 

 
Download de lijst met 101 WordPress-trucs die elke blogger zou moeten kennen

101 WordPress-trucs

Klik hier om nu te downloaden
 
Over de auteur
David Attard
David heeft de afgelopen 21 jaar in of rond de online en digitale industrie gewerkt. Hij heeft ruime ervaring in de software- en webontwerpindustrie met behulp van WordPress, Joomla en de niches eromheen. Hij heeft gewerkt met softwareontwikkelingsbureaus, internationale softwarebedrijven, lokale marketingbureaus en is nu hoofd Marketing Operations bij Aphex Media - een SEO-bureau. Als digitale consultant ligt zijn focus op het helpen van bedrijven om een ​​concurrentievoordeel te behalen door gebruik te maken van een combinatie van hun website en digitale platforms die vandaag de dag beschikbaar zijn. Zijn mix van technologische expertise gecombineerd met een sterk zakelijk inzicht geeft zijn geschriften een concurrentievoordeel.

Nog een ding... Wist je dat mensen die nuttige dingen zoals dit bericht delen er ook GEWELDIG uitzien? ​
Alstublieft laat een nuttig geef commentaar met je mening, deel dit dan op je Facebook-groep (en) die dit nuttig zouden vinden en laten we samen de vruchten plukken. Bedankt voor het delen en aardig zijn!

Disclosure: Deze pagina kan links bevatten naar externe sites voor producten die we geweldig vinden en die we van harte aanbevelen. Als u producten koopt die we aanbevelen, kunnen we een verwijzingsvergoeding verdienen. Dergelijke vergoedingen hebben geen invloed op onze aanbevelingen en we accepteren geen betalingen voor positieve beoordelingen.

Auteur (s) Uitgelicht op:  Inc Magazine-logo   Sitepoint-logo   CSS Tricks-logo    webdesignerdepot-logo   WPMU DEV-logo   en nog veel meer ...