wp_update_user không cập nhật


7

Trong tuyệt vọng tôi cũng đang yêu cầu sự giúp đỡ trong diễn đàn này - nếu ai đó (BẤT CỨ AI!) Có thể xem bài đăng này và xem liệu họ có thể giúp tôi biết ơn mãi mãi không

http://wordpress.org/support/topic/wp_update_user-not-updating?replies=11

Về cơ bản - Tôi đang cập nhật vai trò và khả năng của người dùng thông qua tập lệnh nhưng các thay đổi chỉ có hiệu lực (tức là người dùng có thể thấy các mục menu cụ thể) khi tôi truy cập vào người dùng đó và nhấn "lưu"

Cảm ơn với sự mong đợi!!

Chris

CẬP NHẬT:

Có lẽ điều này giúp giải quyết nó?

Đây là đối tượng WP_User mà tôi đã lặp lại trên màn hình khi đăng nhập với tư cách là người dùng mới thay đổi :

WP_User Object ( [data] => stdClass Object ( [ID] => 130 [user_login] => test [user_pass] => $P$BuHO1ABLCNQ716tktgyes4jqqkfVxG. [user_nicename] => test [user_email] => email@gmail.com [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] => )

Đây là cách mục menu đang được tạo trong tệp plugin của tôi (sẽ hiển thị cho người dùng):

add_menu_page('Welcome', 'Welcome','edit_posts', 'welcome', 'welcome_page', get_bloginfo('template_url').'/images/icon.png', 0);

Đây là chức năng / trang mà mục menu trả về:

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';
}
 }

Như bạn có thể thấy - người dùng chỉ cần khả năng edit_posts để xem mục menu và cho chức năng trả về trang chào mừng. Người dùng thực sự có khả năng này, nhưng không thể làm một trong những điều này - trừ khi tôi nhấp vào "lưu" với tư cách quản trị viên trong trang chỉnh sửa người dùng ??

Chỉnh sửa 2

Sau đây là tất cả các cách tiếp cận khác nhau mà tôi đã thực hiện để thay đổi vai trò người dùng - nếu nó giúp!

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

CẬP NHẬT LẠI!

Tôi vừa thử điều này và một lần nữa, db được cập nhật, thậm chí hiển thị 'trình soạn thảo' trong bảng quản trị, nhưng người dùng vẫn không thể thấy các mục menu phù hợp trừ khi tôi nhấp vào "cập nhật" trên hồ sơ của họ!

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

Có suy nghĩ gì không?


Tôi đã thử mọi thứ tôi biết ở đây các bạn ạ - bất kỳ trợ giúp nào cũng sẽ được đánh giá cao!
Clearmedia

Bạn có đang sử dụng một plugin khác như User Role Editor không? Tôi đang xem xét làm một cái gì đó tương tự như bạn nhưng chưa hoàn thành nó. Các cuộc điều tra ban đầu của tôi đã để lại cho tôi một lưu ý để xem xét các giá trị wp_capabilities. Đã được một thời gian vì vậy tôi không thể nhớ tại sao, nhưng tôi đã thêm đoạn mã này vào phần ghi chú của mình để giúp bạn? update_user_meta($user_id, 'wp_capabilities', '');
TomC

Nếu người dùng xóa bộ nhớ cache của trình duyệt, điều này có hiển thị menu không? Ngoài ra nếu supercache vv bị vô hiệu hóa, hoặc cả hai, điều này có giúp gì không?
Tom J Nowell

Ngoài ra, việc thay đổi khả năng cần thiết trên menu thành vai trò biên tập thay vì edit_posts có giúp ích gì không?
Tom J Nowell

1
Tôi có cùng một vấn đề với wp_user_update bình thường của display_name. Tôi đã vô hiệu hóa các giải pháp bộ nhớ đệm của tôi và không có gì thay đổi. Nếu tôi truy cập trang tiểu sử của người dùng, tên hiển thị sẽ được cập nhật, nhưng trang web chỉ hiển thị sau khi tôi nhấn nút Cập nhật trong user-edit.php
Stefano Tombolini

Câu trả lời:


4

Tôi đang sử dụng remove_rolevà sau đó add_rolenâng cấp người dùng từ vai trò này sang vai trò khác.

Dưới đây là chức năng kiểm tra tất cả người dùng trong thuê bao vai trò người dùng và nâng cấp họ lên trình chỉnh sửa mỗi giờ.

/**
* 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' );

    }
}

Đây là một cách để bạn có thể thử nâng cấp người dùng theo cách thủ công:

Chạy cái này dưới dạng http://yourdomain.com/?upTHER_user

if ( isset( $_REQUEST['upgrade_user'] ) ) {
    upgrade_user();
} 

Đã thử rằng một Pontus - không tốt tôi sợ - tâm trí tôi đang dần chuyển sang ủ rũ - đây là một con ruồi nhỏ bé trong một hệ thống nứt khác!
Clearmedia

Thật kỳ lạ, tôi đang chạy cái này trên bản cài đặt WordPress 3.4 mới được tạo và nó hoạt động với tôi. Bạn thêm nó vào đâu? và bạn đã có một cái gì đó giống như chức năng này chưa?
Pontus Abrahamsson

Bạn có thể thấy cập nhật của tôi ở trên - Tôi chạy mã trong tệp plugin của mình. Cơ sở dữ liệu cập nhật chính xác - nhưng người dùng vẫn không thể nhìn thấy các mục menu, trừ khi tôi đăng nhập với tư cách quản trị viên, truy cập người dùng> chỉnh sửa người dùng và chỉ cần nhấp vào "lưu" ...
Clearmedia

Bạn nên thêm toàn cầu $ current_user để kiểm tra khả năng của người dùng, tôi đã cập nhật mã của bạn. thay vào đó, bạn có thể kiểm tra một vai trò như sau:if ( $user->has_cap('edit_posts') ) {}
Pontus Abrahamsson

Xin lỗi Pontus - bạn đã cập nhật mã của tôi? Tôi đã bao gồm một chỉnh sửa khác cho bài viết ban đầu của mình - Tôi đã thử has_cap. Tôi có sai không khi cho rằng tôi không cần phải khai báo $ current_user toàn cầu nếu tôi đã có ID người dùng?
Clearmedia

0

Tôi phương pháp tốt hơn là. Mà sử dụng WP_User để chuyển / đặt vai trò.

$role = 'editor';
$user = new WP_User($user_id);
$user->set_role($role);

1
Vì điều này đã được -3'ed, ai đó có thể tư vấn tại sao giải pháp của tôi sai không?
Barry Carlyon

Cảm ơn các bạn đã trả lời - đã thử cả hai cách tiếp cận này nhưng không có kết quả :( Tôi tin rằng hệ thống đang cập nhật cơ sở dữ liệu chính xác nhưng người dùng vẫn không thể truy cập các mục menu áp dụng cho đến khi tôi truy cập vào người dùng đó và nhấp vào lưu ... ?
Clearmedia

Hãy thử thêm wp_cache_delete($user_id, 'users');sau $ user của tôi-> set_role. Nhưng trước khi làm điều đó. Người dùng có được hiển thị các mục menu chính xác không, nếu họ đăng xuất và đăng nhập lại? Nếu vậy, bộ đệm tạm thời WP đang can thiệp và wp_cache_delete sẽ xóa điều này. (Chưa được thử nghiệm)
Barry Carlyon

Cảm ơn Barry - họ vẫn không thể nhìn thấy các mục menu sau khi đăng xuất và đăng nhập lại. - nó giống như chức năng cập nhật bị thiếu hoặc không thực hiện một việc nhỏ nào đó xảy ra khi cập nhật hồ sơ người dùng thông qua quản trị viên> bảng điều khiển người dùng ...?
Clearmedia

1
Câu trả lời này là chính xác, tôi đã thử nghiệm nó, nó hoạt động đúng. Tôi không biết bạn đang làm gì sai, nhưng thực sự không có gì hơn để thiết lập vai trò mới hơn điều này.
Otto
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.