web-dev-qa-db-fra.com

Obtenir PHP Erreur fatale sur la $ wpdb globalisée: appel d'une fonction membre insert () sur un non-objet - je n'en ai aucune idée. Que faire?

J'essaie d'utiliser cette fonction. Je n'arrive pas à comprendre pourquoi j'obtiens toujours l'erreur PHP. Tout ce que je peux comprendre, c'est que, pour une raison quelconque, le modèle ne peut pas accéder à $ wpdb. Je ne sais pas quelle ligne doit être placée dans le fichier functions.php (dans le dossier du thème) contenant cette fonction. Aidez-moi, s'il vous plaît!!

function submitWeightUpdate( $userid, $weight ) {
    global $wpdb;

    $result = $wpdb->insert( 'wp_weights', array( 'user_id' => $userid, 'current_weight' => $weight ), array( '%d', '%d' ) );

    if (empty($_POST['weight'])) {
        $return['error'] = true;
        $return['msg'] = 'You did not enter a weight.';
    }
    else {
        $return['error'] = false;
        $return['msg'] = 'You\'ve entered: ' . $weight . ' as your new weight.';
    }

    echo json_encode($return);
} 

J'ai également essayé de définir le thème par défaut et il ne fonctionne toujours pas. Je ne sais donc pas ce qui ne va pas!

1
Brandon

Vous avez tout fait correctement avec la globalisation, le message d'erreur vous indique simplement que vous avez appelé une fonction sur $ wpdb qui n'existe pas.

Vérifiez juste avant de faire que $ wpdb contient l’objet qui vous intéresse:

if (is_object($wpdb) && is_a($wpdb, 'wpdb')) {
    $result = $wpdb->insert( 'wp_weights', array( 'user_id' => $userid, 'current_weight' => $weight ), array( '%d', '%d' ) );
}

Vous pouvez également ajouter ceci sous la ligne globale pour en savoir plus:

global $wpdb;
var_dump($wpdb); // dump variable type and contents.

Essayez en plus:

require_once( ABSPATH . 'wp-load.php' );
global $wpdb;

WordPress n'est peut-être pas prêt à vous fournir ce dont vous avez besoin dans $ wpdb.

3
hakre

Il est probable que $ wpdb a été mondialisé lorsqu'il frappe votre fonction particulière. Essayez de vérifier $ GLOBALS et s'il y a une entrée pour $ wpdb, supprimez la ligne $ global $ wpdb; au début de votre funciton.

0
Ethan Seifert