web-dev-qa-db-fra.com

WordPress 4.5 obsolète get_currentuserinfo ()

Il y a environ 10 jours, Les développeurs de WordPress 4.5 ont déconseillé d'obtenir get_currentuserinfo () comme fonction enfichable. Malheureusement, mon plugin utilise sa propre méthode get_currentuserinfo () pour connecter les utilisateurs à partir d'une base de données externe.

Cela va nécessiter une réécriture de cette zone du plugin pour la compatibilité WP 4.5.

Étant donné que je ne suis pas le seul à utiliser cette fonction avec un pont, quelle direction doivent prendre les développeurs de ponts?

7
LPH

La réponse se trouve dans la fonction enfichable wp_get_current_user(). J'ai simplement changé le nom de la fonction get_currentuserinfo() en wp_get_current_uesr(), puis je me suis assuré que les retours n'étaient pas booléens, mais renvoyaient $ utilisateur_actuel.

Cela semble bien fonctionner, y compris la mise en cache, etc.

Espérons que cela aide les autres.

if ( ! function_exists( 'wp_get_current_user' ) ) :

/**
 * This replacement function will no longer work after WordPress 4.5
 * The pluggable function was deprecated in WP 4.5
 *
 * @return void|boolean
 *
 * @since 2.5.1.03
 *        Added apply_filter to match WP get_currentuserinfo()
 *
 * @since 3.0.2.01
 *        wp_get_current_user instead of get_currentuserinfo()
 */

function wp_get_current_user() {
    global $current_user;

    if ( ! empty( $current_user ) ) {
        if ( $current_user instanceof WP_User ) {
            return $current_user;
        }

        // Upgrade stdClass to WP_User
        if ( is_object( $current_user ) && isset( $current_user->ID ) ) {
            $cur_id       = $current_user->ID;
            $current_user = null;
            wp_set_current_user( $cur_id );
            return $current_user;
        }

        // $current_user has a junk value. Force to WP_User with ID 0.
        $current_user = null;
        wp_set_current_user( 0 );
        return $current_user;
    }

    if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
        wp_set_current_user( 0 );
        return $current_user;
    }

    $visitor = XenWord::getVisitor();

    $user_id = $visitor['user_id'];

    // Conditional for no XenForo user is logged in
    if ( $user_id == 0 ) {
        $current_user = null;
        wp_set_current_user( 0 );
        return $current_user;
    }

    /**
     * Filter the current user.
     *
     * The default filters use this to determine the current user from the
     * request's cookies, if available.
     *
     * Returning a value of false will effectively short-circuit setting
     * the current user.
     *
     * @since 3.9.0
     *
     * @param int|bool $user_id User ID if one has been determined, false otherwise.
     */
    $user_id = apply_filters( 'determine_current_user', false );
    if ( ! $user_id ) {
        wp_set_current_user( 0 );
        return $current_user;
    }

    $current_user = get_userdata( $user_id );

    wp_set_current_user( $user_id );

    wp_validate_auth_cookie($cookie = '', $scheme = '');

    // Check to determine if adding XF users to WP database
    XenWord_XF_Users::check_options();

    return $current_user;
}

endif;
6
LPH