Y at-il une sorte de cache de requête MySQL activé par défaut ou quelque chose? J'essaie de travailler sur un script d'importation d'utilisateur et je vois des résultats étranges de la fonction username_exists
après avoir supprimé des enregistrements de la table wp_users
. Après avoir supprimé les enregistrements lorsque j'appelle username_exists
, Wordpress renvoie toujours l'ID de l'utilisateur supprimé au lieu de false
. Impair. Qu'est-ce que je rate?
Par défaut, WordPress utilise $wp_object_cache
qui est une instance de WP_Object_Cache
pour économiser sur les déplacements dans la base de données.
Retracez la fonction username_exists()
/, vous remarquerez que get_user_by()
utilise WP_User::get_data_by()
qui renvoie les données utilisateur de $wp_object_cache
immédiatement sans vérifier si l'utilisateur existe dans la base de données. Notez que $wp_object_cache
est stocké dans la mémoire.
Cela signifie que si vous supprimez un enregistrement d'utilisateur directement dans votre base de données sans nettoyer le cache de l'utilisateur, les données de l'utilisateur sont toujours disponibles. C'est le problème.
Alors qu'est-ce qu'il te manque?
Manquant à supprimer l'utilisateur de la bonne manière .
Manquant à nettoyer le cache utilisateur .
La mise en cache peut être n'importe où, à commencer par la mise en cache des requêtes côté composants mysql (sans impact dans ce cas), et la mise en cache des objets côté wordpress.
Vous faites probablement quelque chose de mal dans votre code, mais il est toujours préférable d'utiliser l'API (ou wordpress admin comme interface frontale) pour supprimer des éléments, puis d'essayer de les supprimer en accédant directement à la base de données. Ce n'est pas seulement la mise en cache qui peut vous donner des problèmes, mais également les méta utilisateurs et autres paramètres de configuration que vous n'allez pas prendre en compte.