wp_update_user не обновляется

В отчаянии я тоже прошу помощи в этом форуме - если кто-то (ЛЮБОЙ!) может посмотреть этот пост и посмотреть, смогут ли они помочь, я буду вечно благодарен

http://wordpress.org/support/topic/wp_update_user- не-обновление? ответ = 11

В основном - я обновляю роль пользователя и возможности через скрипт, но изменения вступают в силу (т.е. пользователь может видеть определенные пункты меню), когда я вхожу в этого пользователя и нажимаю «save»

Спасибо в ожидании!

Крис

UPDATE:

Может быть, это поможет решить эту проблему?

Это объект 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')); 

ОБНОВЛЕНИЕ СНОВА!

Я только что попробовал это и снова, db обновлен, даже показывает «редактор» на панели администратора, но пользователь все еще не видит соответствующие пункты меню, если я не нажму «обновить» в своем профиле!

$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');

Любые мысли?

7 голосов | спросил Clearmedia 15 J000000Sunday12 2012, 08:13:33

2 ответа


4

Im, используя remove_role, а затем add_role для обновления пользователя от одной роли к другой.

Вот функция, которая проверяет всех пользователей в роли пользователя подписчика и обновляет их до редактора каждый час.

/**
* 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();
} 
ответил Pontus Abrahamsson 15 J000000Sunday12 2012, 13:28:16
0

Я лучший метод. Который использует WP_User для переключения /установки роли.

$role = 'editor';
$user = new WP_User($user_id);
$user->set_role($role);
ответил Barry Carlyon 15 J000000Sunday12 2012, 14:41:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132