Крюк для запуска после удаления пользователя - PullRequest
0 голосов
/ 04 июля 2019

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

Я достиг этого, сделав это:

function sync_user( $user_id )
{
    $list_ids = get_sites();
    $current_site = get_current_site();

    $info = get_userdata($user_id);



    foreach( $list_ids as $list )
    {

        if ( $list->blog_id != $current_site->id )
        {
            add_user_to_blog($list->id, $info->ID, 'subscriber');
        }

    }

    // quick fix for: above somehow doesn't add to main site. add to main site here.
    add_user_to_blog(1, $info->ID, 'subscriber');

}

Теперь я хочу удалить пользователя, когда я удалил его с сайта. Я пытался подключить его с помощью «remove_user_from_blog», но это вызвало бесконечный цикл.

Где я могу перехватить следующий код, чтобы я мог удалить всех тех пользователей, которых я добавил ранее, используя приведенный выше код?

function unsync_user( $user_id )
{
    $list_ids = get_sites();

    foreach( $list_ids as $list )
    {
        remove_user_from_blog( $user_id, $list->ID );
    }
}

отредактировал заголовок для ясности

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Абдул Рахман был прав насчет этого. Когда пользователь нажимает «удалить» из списка пользователей, действие не запускает ловушку «delete_user» или «delete_user». Я проверял это.

Я думаю, что это сложно. Итак, вот как добавить пользовательское действие remove_user. Добавьте эти строки ниже в ваш плагин.

add_action('remove_user_from_blog', function($user_id, $blog_id) {
    // checking current action
    // refer: wp-admin/users.php:99
    $wp_list_table = _get_list_table( 'WP_Users_List_Table' );

    if( $wp_list_table->current_action() != 'doremove' ) {
        return; // only proceed for specific user list action
    }

    $fire_removed_user_hook = null; // closure reference

    $fire_removed_user_hook = function() use ($user_id, $blog_id, &$fire_removed_user_hook) {
        do_action( 'removed_user', $user_id, $blog_id );

        // remove the hook back
        remove_action('switch_blog', $fire_removed_user_hook);
    };

    // restore_current_blog called at the last line in the remove_user_from_blog function
    // so action switch_blog fired
    add_action('switch_blog', $fire_removed_user_hook);
}, 10, 2);


add_action('removed_user', function($user_id, $blog_id) {
 // the user removed from be blog at this point
}, 10, 2);
0 голосов
/ 04 июля 2019

Хук «delete_user» запускается после удаления пользователя («delete_user» запускается до того, как происходит удаление):

https://codex.wordpress.org/Plugin_API/Action_Reference/deleted_user

...