J'essaie de comprendre comment ajouter des informations sur l'utilisateur et des métadonnées spécifiques à une table distincte via PHP. Je préférerais faire cela lorsqu'un utilisateur a posté dans les tables wp_users
et wp_usermeta
. J'utilise le plugin WooCommerce Auction et le thème Salient.
De plus, si j'ai créé un fichier PHP qui a lancé une requête pour extraire les données, puis l'insérer, quel est le bon emplacement pour appeler cette fonction afin de garantir que la table est à jour?
C'est la fonction que j'ai créée.
add_action('user_register', 'save_to_donors',10,1);
function save_to_donors( $user_id ) {
$single = true;
$user_email = get_userdata($user_id);
$fn= get_user_meta($user_id, 'first_ name', $single );
$ln= get_user_meta($user_id, 'last_name', $single );
$em= $user_email->user_email;
$ph= get_user_meta($user_id, 'billing_phone', $single );
$ad= get_user_meta($user_id, 'billing_address_1', $single );
$ci= get_user_meta($user_id, 'billing_city', $single );
$st= get_user_meta($user_id, 'billing_state', $single );
$zi= get_user_meta($user_id, 'billing_postcode',$single );
$do= get_user_meta($user_id, '_money_spent', $single );
$sql = "INSERT INTO donors (user_id,first_name,last_name,email," .
"phone,address,city,state,Zip,amount_donated)".
"VALUES('$user_id','$fn','$ln','$em','$ph','$ad','$ci','$st','$zi','$do')";
$result = mysqli_query($wpdb, $sql) or die('Write Error!');
}
Il me semble que vous devriez chercher un crochet d’achèvement pour l’achat de woocommerce. C’est à ce moment-là que vous pouvez ajouter qu’un don a été fait et à quel montant, puis vous pouvez récupérer toutes les informations utilisateur, le montant payé et les autres informations dont vous avez besoin et les sauvegarder dans votre table des donateurs.
utilisez ceci:
add_action('woocommerce_order_status_completed', 'save_to_donors',10,1);
au lieu de cela:
add_action('user_register', 'save_to_donors',10,1);
remplacez également $user_id
par $order_id
en tant que paramètre transmis à votre fonction.
Vous devrez apporter des modifications à votre fonction car $order_id
sera désormais transmis à votre fonction au lieu de $user_id
. Vous pouvez utiliser une partie du code suivant pour obtenir l'objet $order
et $user_id
. J'ai également trouvé un autre code qui vous permettra d'obtenir des informations de la commande par rapport aux méta des utilisateurs, ne sachant pas s'ils seront différents.
$order = new WC_Order( $order_id );
$user_id = $order->user_id;
$billing_address = $order->get_billing_address();
$billing_address_html = $order->get_formatted_billing_address(); // for printing or displaying on web page
$shipping_address = $order->get_shipping_address();
$shipping_address_html = $order->get_formatted_shipping_address(); // for printing or displaying on web page
Informations sur l'utilisation de ce hook woocommerce_order_status_completed
Informations sur la manière de obtenir l'identifiant de l'utilisateur à partir de l'identifiant de commande
Ce crochet d'action vous permet d'accéder aux données d'un nouvel utilisateur immédiatement après leur ajout à la base de données. L'identifiant de l'utilisateur est passé à accrocher en argument.
Toutes les métadonnées de l'utilisateur n'ont pas été stockées dans la base de données lorsque cette action est déclenchée. Par exemple, le pseudonyme est dans la base de données mais avec les prénom et nom. Le mot de passe a déjà été crypté lorsque cette action est déclenchée.
En règle générale, ce raccordement est utilisé pour enregistrer les méta-utilisateurs supplémentaires transmis par les formulaires d'inscription personnalisés.
Cet exemple enregistrera un champ prénom par un champ d’enregistrement personnalisé.
De plus, gardez à l'esprit que la validation des champs d'enregistrement ne doit pas être effectuée à l'intérieur de ce crochet! Validez à l'aide du hook registration_errors (le hook user_register ne sera pas appelé si la validation de registration_errors échoue).
add_action( 'user_register', 'myplugin_registration_save', 10, 1 );
function myplugin_registration_save( $user_id ) {
if ( isset( $_POST['first_name'] ) )
update_user_meta($user_id, 'first_name', $_POST['first_name']);
}
NOTE: Cette réponse ne semble pas pertinente pour la question du PO après une analyse plus approfondie de la fonction ajoutée/mise à jour dans la question. Je laisse cette réponse en place et crée une nouvelle réponse pour une utilisation historique, puisqu’une partie de la question semble applicable.
Vous pouvez utiliser quelque chose comme ce qui suit pour créer une méta utilisateur lorsque des utilisateurs sont ajoutés à la table user. Placez ceci dans le fichier functions.php de votre thème.
function myplugin_registration_save( $user_id ) {
if ( isset( $_POST['first_name'] ) )
update_user_meta(
$user_id,
'your_key', // name of key
$your_value // value of your key
);
}
add_action( 'user_register', 'myplugin_registration_save', 10, 1 );
Pour récupérer ces données pour une utilisation ultérieure, utilisez la fonction:
get_user_meta($user_id, 'your_key', $single);
Plus d'infos sur user_register hook Plus d'infos sur update_user_meta () Plus d'infos sur get_user_meta ()