必死になって私もこのフォーラムで助けを求めています - 誰か(ANYONE!)がこの投稿を見て、彼らが私が永遠に感謝するのを助けることができるかどうかを確かめることができるならば
http://wordpress.org/support/topic/wp_update_user-not-updating?replies=11
基本的に - 私はスクリプトでユーザーの役割と能力を更新していますが、変更はそのユーザーに入って "保存"をクリックしたときに有効になります(すなわち、ユーザーは特定のメニュー項目を見ることができます)。
期待してくれてありがとう!
クリス
更新:
多分これはそれを解決するのに役立ちますか?
これは、新しく変更されたユーザーとしてログインしたときに画面に表示されるWP_Userオブジェクトです :
WP_User Object ( [data] => stdClass Object ( [ID] => 130 [user_login] => test [user_pass] => $P$BuHO1ABLCNQ716tktgyes4jqqkfVxG. [user_nicename] => test [user_email] => [email protected] [user_url] => [user_registered] => 2012-07-19 12:07:52 [user_activation_key] => [user_status] => 0 [display_name] => test ) [ID] => 130 [caps] => Array ( [editor] => 1 ) [cap_key] => wp_capabilities [roles] => Array ( [0] => editor ) [allcaps] => Array ( [upload_files] => 1 [unfiltered_html] => 1 [edit_posts] => 1 [edit_published_posts] => 1 [publish_posts] => 1 [edit_pages] => 1 [read] => 1 [level_7] => 1 [level_6] => 1 [level_5] => 1 [level_4] => 1 [level_3] => 1 [level_2] => 1 [level_1] => 1 [level_0] => 1 [edit_published_pages] => 1 [publish_pages] => 1 [manage_options] => 1 [view_menu] => 1 [editor] => 1 ) [filter] => )
これは私のプラグインファイルにメニュー項目が作成される方法です(これはユーザーに表示されるはずです):
add_menu_page('Welcome', 'Welcome','edit_posts', 'welcome', 'welcome_page', get_bloginfo('template_url').'/images/icon.png', 0);
メニュー項目が返す関数/ページです。
function welcome_page()
{
global $currrent_user;
if(!current_user_can('edit_posts'))
{
print '<div class="wrap"><h2>Your account has been restricted, most likely due to an unpaid subscription.</div>';
}
else
{
include 'welcome-page.php';
}
}
ご覧のとおり、ユーザーはメニュー項目を表示し、関数がウェルカムページを返すためのedit_posts機能のみを必要とします。ユーザーは確かにこの機能を持っていますが、私はユーザー編集ページで管理者として "保存"をクリックしない限り - これらのことのいずれかを行うことはできません?
編集2
以下は私がユーザーロールを変更するために取ったすべての異なるアプローチです - それが助けになれば!
//using this currently
$user = new WP_User($unpaid->uid);//$unpaid->uid is the users ID
$user->set_role('editor');
if(!$user->has_cap('edit_posts'))
{
$user->add_cap('edit_posts');
}
wp_cache_delete($unpaid->uid, 'users');
//another attempt
$uID = $unpaid->uid;
wp_insert_user(array('ID'=>$uID,'role'=>'editor'));
もう一度更新してください。
私はこれを試したばかりで、管理パネルに 'editor'と表示されていてもデータベースが更新されますが、ユーザーは自分のプロファイルで "更新"をクリックしない限り適切なメニュー項目を見ることができません。
$new = new WP_User($current_user->ID);
$new->set_role('editor');
wp_cache_delete( $new->ID, 'users' );
wp_cache_delete( $new->user_login, 'userlogins' );
wp_cache_delete( $new->user_email, 'useremail' );
wp_cache_delete( $new->user_nicename, 'userslugs' );
do_action('profile_update');
何かご意見は?
remove_role
を使用してからadd_role
を使用して、ある役割から別の役割にユーザーをアップグレードします。
これは、ユーザロール subscriber 内のすべてのユーザをチェックし、それらを editor に1時間ごとにアップグレードする機能です。
/**
* Add a cron job that will update
* Subscribers to editors. Runs hourly
*/
add_action('check_user_role', 'upgrade_user');
function run_check_user_role() {
if ( !wp_next_scheduled( 'check_user_role' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'hourly', 'check_user_role');
}
}
add_action( 'wp', 'run_check_user_role' );
function upgrade_user() {
// Get users in subscriber role
$args = array(
'role' => 'subscriber',
);
$users = get_users( $args );
foreach ( $users as $user ) {
$user = new WP_User( $user->ID );
// Remove current subscriber role
$user->remove_role( 'subscriber' );
// Upgrade to editor role
$user->add_role( 'editor' );
}
}
これはあなたが手動でユーザーをアップグレードすることを試みることができるように方法です:
これを http://yourdomain.com/?upgrade_userのように実行します。
if ( isset( $_REQUEST['upgrade_user'] ) ) {
upgrade_user();
}
もっといい方法です。これはWP_Userを使用してロールを切り替え/設定します。
$role = 'editor';
$user = new WP_User($user_id);
$user->set_role($role);