Yazar sadece kendi yazılarını ve kendi yüklediği dosyaları görebilsin


Bildiğiniz gibi sitenize bir yazar yada içerik sağlayıcı atadığınızda bu kişi herkese ait konuları görüntüleyebilme yetkisine sahiptir. Benim için pek dert edilecek bir durum olmasa da eminim dert eden çoğu kişi vardır. Yazar ve içerik sağlayıcılara, yönetim panelindeki “Tüm yazılar” sekmesinde sadece kendisine ait olan konuları göstermek istiyorsanız aşağıda verdiğimiz kod işinize yarayacaktır. bu kodu functions.php dosyasına eklediğinizde, sitenizdeki her yazar veya içerik sağlayıcı, sadece kendi oluşturdukları konuları görebilecekler. Normalde WordPress yönetim panelinde içerik sağlayıcılar herkesin yazılarını görme yetkisine sahip iken, yazar olarak atanmış kişiler de herkese ait makaleleri görüntüleme ve düzenleme yetkisine sahiptirler. Bu kodu kullandıktan sonra herkes sadece kendi yazılarını görebileceğinden dolayı kimse başkasına ait bir konuyu görüntüleyemeyecek yada düzenleyemeyecek. Ayrıca başka kişilerin yüklemiş olduğu ortam dosyalarını da görüntülemeyi kısıtlıyor bu kod.

Kod

functions.php dosyasına eklemeniz gereken kod:

// Admin paneline giriş yapan yazara sadece kendi yazılarını ve kendi yüklediği görselleri göster
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');
    }
}

// Fix post counts
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(__('All (%d)', '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(__('Published (%d)', '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(__('Draft'. ((sizeof($result->posts) > 1) ? "s" : "") .' (%d)', '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(__('Pending (%d)', '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(__('Trash (%d)', 'trash'),
                admin_url('edit.php?post_status=trash&post_type=post'),
                $result->found_posts);
        endif;
    }
    return $views;
}

// Görsel sayılarını yazara göre düzelt
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'] = "" . sprintf( __('All (%s)', 'uploaded files' ), number_format_i18n( $_total_posts )) . '';
    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] = "" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), $num_posts[$mime_type] ) . '';
    }
    $views['detached'] = '' . sprintf( __( 'Unattached (%s)', 'detached files' ), $total_orphans ) . '';
    return $views;
}
Ali

You may also like

Leave a reply

E-posta hesabınız yayımlanmayacak.

More in Ders