Bir kullanıcının rolünü nasıl değiştirebilirim?


34

Kurulumumda özel rollere sahibim ve bir kullanıcının işlev aracılığıyla rolünü otomatik olarak değiştirebilmek istiyorum. A kullanıcısının bir SUBSCRIBER rolü olduğunu söyleyin, EDITOR olarak nasıl değiştiririm? Bir rol eklerken biz sadece:

add_role( $role_name , $role_display_name , array( 'read' =>  true,
                                                   'edit_posts' => false,
                                                   'delete_posts' => false, ));

Rol değiştirmeye ne dersiniz? Gibi bir şey var mı:

change_role($old_role, $new_role);

GÜNCELLEME: Bunun yapacağını düşünüyorum:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');

Yanıtlar:


50

WP_User sınıfına bakın , bunu bir kullanıcının rollerini eklemek ve kaldırmak için kullanabilirsiniz.

EDIT: Başlangıçta bu cevapta daha fazla bilgi vermeliydim, o yüzden aşağıda daha fazla bilgi ekliyorum.

Daha spesifik olarak, bir kullanıcının rolü WP_user sınıfının bir örneğini oluşturarak ve add_role()veya remove_role()yöntemlerini çağırarak belirlenebilir .

Örnek

Editöre abone rolünü değiştirme

// NOTE: Of course change 3 to the appropriate user ID
$u = new WP_User( 3 );

// Remove role
$u->remove_role( 'subscriber' );

// Add role
$u->add_role( 'editor' );

Umarım bu benim ilk cevabımdan daha faydalıdır, ki bu da mutlaka gerekli değildi.


remove_role()ve add_rule()veriyi veritabanına kaydetme?
b_dubb

18

Sadece kullanıcının mevcut rolünü bilmediğinizde özellikle yardımcı olan kullanıcı rolünü değiştirmenin daha basit bir yolu olduğunu unutmayın: ->set_role()

Örnek:

// Fetch the WP_User object of our user.
$u = new WP_User( 3 );

// Replace the current role with 'editor' role
$u->set_role( 'editor' );

Set_role kullanıcısının önceki rollerini kaldıracağını ve yeni rolü atayacağını unutmayın.
shasi kanth

1
Bu özel kayıt formları için mükemmeldir. Öncelikle rolleri olmayan kullanıcıları kaydedin ve bundan sonra e-postayı onayladıklarında rol ekleyin.
Ivijan Stefan Stipić

3

T31os'un cevabını tahmin etmek için, bir koşulu temel alarak programlı bir şekilde yapmak istiyorsanız, fonksiyon dosyanızda bunun gibi bir şeyi tokatlayabilirsiniz.

$blogusers = get_users($blogID.'&role=student');

foreach ($blogusers as $user) {

    $thisYear = date('Y-7');
    $gradYear = date(get_the_author_meta( 'graduation_year', $user->ID ).'-7');

    if($gradYear < $thisYear) {
        $u = new WP_User( $user->ID );
        // Remove role
        $u->remove_role( 'student' );

        // Add role
        $u->add_role( 'adult' );
    }
}

Kullanımının $blogIDyanlış olduğunu düşünüyorum . get_users()Zaten mevcut blog kimliğini varsayılan olarak kullanacak
fuxia

evet, benim durumumda macun sadece multisite bir örnekti. Onu burada tanımlamamıştım ya da açıkça bir hata yapacaktır.
Adam Munns 26:12

2

Kullanıcı profilini düzenleyerek herhangi bir kullanıcının rolünü değiştirebilirsiniz. Bu seçenek zaten WordPress'te yerleşikken, daha fazla kod eklemenize gerek yoktur.

görüntü tanımını buraya girin

Veya

Abone rolü ile mevcut tüm kullanıcıları editör olarak değiştirmek için kodu kullanabilirsiniz:

$current_user = wp_get_current_user();

// Remove role
$current_user->remove_role( 'subscriber' );

// Add role
$current_user->add_role( 'editor' );

1

Bunun için bir WordPress işlevi var!

Bence, ne zaman ve ne zaman varsa WordPress işlevlerini kullanmak en iyisidir.

Sağlamanız gereken argümanlardan birinin $ userdata ['role'] olduğu wp_insert_user () işlevini kullanabilirsiniz . Bu argümanda, kullanıcıyı değiştirmek istediğiniz rolü belirleyebilirsiniz.


wp bu işlevi tanımıyor. Bir "tanımsız işlev" hatası alıyorum.
Joann

Görünüşe göre, wp_insert_user () aynı şeyi yapıyor gibi görünüyor. Bir kimlik sağladığınızda, bu kimlik güncellenir. Kimlik yok, yeni kullanıcı ekliyor. Wp_update_user () ve wp_insert_user () arasındaki farkın ne olduğunu gerçekten bilmiyorum.
Coen Jacobs

1

kodu tek başına bir komut dosyası olarak kullanıyorsanız, /wp-includes/registration.php dosyasını eklemeniz gerekir. Saygılarımızla Uwe


1

Wp_update_user kullanabilirsiniz . Kodun şöyle olmalı:

<?php
    $user_id = 3;
    $new_role = 'editor';

    $result = wp_update_user(array('ID'=>$user_id, 'role'=>$new_role));

    if ( is_wp_error( $result ) ) {
        // There was an error, probably that user doesn't exist.
    } else {
        // Success!
    }
?>

0
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // NOTE: Of course change 3 to the appropriate user ID
      $u = new WP_User( $wuser_ID );

      // Remove role
      $u->remove_role( 'subscriber' );

      // Add role
      $u->add_role( 'contributor' );
    }
?>

0

Ben onun a çok eski Mesaj biliyorum, ama kullanıcılar için roller saklanır bulduk wp_usermetaanahtarla tabloda wp_capabilitiesyer meta_keysütununda.

Kullanıcı rolünü değiştirmek istiyorsanız, bu basit işlevle yapabilirsiniz.

function change_role($id, $new_role){
    GLOBAL $table_prefix;
    if(is_array($new_role)){
        $new_role_array = $new_role;
    }else{
        $new_role_array = array( $new_role => true );
    }
    return update_user_meta($id, $table_prefix.'capabilities', $new_role_array);
}

Bu işlevi kullanmanın iki yolu vardır.

Tek bir rolün rolünü değiştirmek istiyorsanız.

change_role(2, 'editor'); // editor is the new role

Veya kullanıcıya çoklu roller eklemek isterseniz, rolleri ikinci parametrede dizi olarak kullanın.

$roles_array = array('editor' => true, 'administrator' => true); // roles array
change_role(2, $roles_array);

İyi şanslar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.