Jetpack::xmlrpc_async_call PHP Метод

xmlrpc_async_call() публичный статический Метод

Helper method for multicall XMLRPC.
public static xmlrpc_async_call ( )
    public static function xmlrpc_async_call()
    {
        global $blog_id;
        static $clients = array();
        $client_blog_id = is_multisite() ? $blog_id : 0;
        if (!isset($clients[$client_blog_id])) {
            Jetpack::load_xml_rpc_client();
            $clients[$client_blog_id] = new Jetpack_IXR_ClientMulticall(array('user_id' => JETPACK_MASTER_USER));
            if (function_exists('ignore_user_abort')) {
                ignore_user_abort(true);
            }
            add_action('shutdown', array('Jetpack', 'xmlrpc_async_call'));
        }
        $args = func_get_args();
        if (!empty($args[0])) {
            call_user_func_array(array($clients[$client_blog_id], 'addCall'), $args);
        } elseif (is_multisite()) {
            foreach ($clients as $client_blog_id => $client) {
                if (!$client_blog_id || empty($client->calls)) {
                    continue;
                }
                $switch_success = switch_to_blog($client_blog_id, true);
                if (!$switch_success) {
                    continue;
                }
                flush();
                $client->query();
                restore_current_blog();
            }
        } else {
            if (isset($clients[0]) && !empty($clients[0]->calls)) {
                flush();
                $clients[0]->query();
            }
        }
    }

Usage Example

 /**
  * Synchronize connected user role changes
  */
 static function user_role_change($user_id)
 {
     if (Jetpack::is_active() && Jetpack::is_user_connected($user_id)) {
         $current_user_id = get_current_user_id();
         wp_set_current_user($user_id);
         $role = Jetpack::translate_current_user_to_role();
         $signed_role = Jetpack::sign_role($role);
         wp_set_current_user($current_user_id);
         $master_token = Jetpack_Data::get_access_token(JETPACK_MASTER_USER);
         $master_user_id = absint($master_token->external_user_id);
         if (!$master_user_id) {
             return;
         }
         // this shouldn't happen
         Jetpack::xmlrpc_async_call('jetpack.updateRole', $user_id, $signed_role);
         //@todo retry on failure
         //try to choose a new master if we're demoting the current one
         if ($user_id == $master_user_id && 'administrator' != $role) {
             $query = new WP_User_Query(array('fields' => array('id'), 'role' => 'administrator', 'orderby' => 'id', 'exclude' => array($master_user_id)));
             $new_master = false;
             foreach ($query->results as $result) {
                 $uid = absint($result->id);
                 if ($uid && Jetpack::is_user_connected($uid)) {
                     $new_master = $uid;
                     break;
                 }
             }
             if ($new_master) {
                 Jetpack_Options::update_option('master_user', $new_master);
             }
             // else disconnect..?
         }
     }
 }
All Usage Examples Of Jetpack::xmlrpc_async_call
Jetpack