Maison > Questions et réponses > le corps du texte
J'essaie d'interroger une base de données et de transmettre les résultats à update_post_meta
函数。但是不确定我是否正确构建了这个,或者我的 $order_id
Y a-t-il un problème lors de l'utilisation de ceci ?
Une fois qu'une commande est passée, je dois mettre à jour la méta de la publication avec l'utilisateur actuellement connecté et les résultats de la requête pour la commande en cours, j'ai donc pensé que le crochet woocommerce_thankyou
aurait du sens, mais la méta de la publication ne sera pas écrite après la commande. est terminé. < /p>
add_filter( 'woocommerce_thankyou', 'my_function', 10, 2); function my_function( $result, $order_id ) { // Load the global $post global $woocommerce, $post; // Get the post ID $order_id = $post->ID; // Then you can get the order object $order = wc_get_order( $order_id ); $user_ID = get_current_user_id(); //SQL global $wpdb; return $wpdb->get_var("SELECT SUM(b03_woocommerce_order_itemmeta.meta_value) FROM b03_woocommerce_order_itemmeta JOIN b03_woocommerce_order_items ON b03_woocommerce_order_itemmeta.order_item_id = b03_woocommerce_order_items.order_item_id JOIN b03_posts ON b03_woocommerce_order_items.order_id = b03_posts.ID JOIN b03_postmeta ON b03_posts.ID = b03_postmeta.post_id WHERE b03_posts.post_type = 'shop_order' AND b03_woocommerce_order_itemmeta.meta_key = 'trees_planted' AND b03_postmeta.meta_value = $user_ID AND b03_postmeta.meta_key = '_customer_user' AND b03_posts.ID = $order_id"); update_post_meta( $order_id, 'trees',$wpdb); }
Des suggestions sur la meilleure façon de gérer cela ?
P粉2564870772024-04-01 13:19:09
Votre tentative de code contient plusieurs bugs et erreurs :
woocommerce_thankyou
est un crochet d'action, pas un crochet filtre$order_id
传递给回调函数,$result
N/A $wpdb->prefix
与 b03_
, cela peut le rendre dynamique $wpdb
est un objetglobal $woocommerce、$post;
est redondanteVous obtenez donc :
function action_woocommerce_thankyou( $order_id ) { // Get $order object $order = wc_get_order( $order_id ); // Is a WC_Order if ( is_a( $order, 'WC_Order' ) ) { // Get user id $user_id = $order->get_user_id(); // Not a guest if ( $user_id > 0 ) { //SQL global $wpdb; // The SQL query $result = $wpdb->get_var( " SELECT SUM( oim.meta_value ) FROM {$wpdb->prefix}woocommerce_order_itemmeta as oim JOIN {$wpdb->prefix}woocommerce_order_items as oi ON oim.order_item_id = oi.order_item_id JOIN {$wpdb->prefix}posts as p ON oi.order_id = p.ID JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id WHERE p.post_type = 'shop_order' AND oim.meta_key = 'trees_planted' AND pm.meta_value = '$user_id' AND pm.meta_key = '_customer_user' AND p.ID = '$order_id' " ); // REMOVE THIS, only for testing purposes $result = 10; // Add the meta data $order->update_meta_data( 'trees', $result ); $order->save(); } } } add_action( 'woocommerce_thankyou', 'action_woocommerce_thankyou', 10, 1 );
REMARQUE : Puisque vous utilisez une requête SQL personnalisée où les données/résultats n'existent pas généralement/par défaut dans WooCommerce, mais juste pour vous, je l'ai remplacé par la valeur fixe de 10 dans ma réponse. Ajustez au besoin!