Rumah > Soal Jawab > teks badan
Saya cuba menanyakan pangkalan data dan menyerahkan hasilnya kepada update_post_meta
函数。但是不确定我是否正确构建了这个,或者我的 $order_id
Adakah terdapat masalah menggunakan ini?
Setelah pesanan dibuat, saya perlu mengemas kini meta pos dengan pengguna yang sedang log masuk dan hasil pertanyaan untuk pesanan semasa, jadi fikir cangkuk woocommerce_thankyou
akan masuk akal, tetapi meta pos tidak akan ditulis selepas pesanan sudah selesai. < /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); }
Sebarang cadangan tentang cara terbaik untuk menangani perkara ini?
P粉2564870772024-04-01 13:19:09
Percubaan kod anda mengandungi berbilang pepijat dan ralat:
woocommerce_thankyou
ialah cangkuk aksi, bukan cangkuk penapis$order_id
传递给回调函数,$result
T/T $wpdb->prefix
与 b03_
, ini boleh menjadikannya dinamik $wpdb
ialah objekglobal $woocommerce、$post;
adalah berlebihanJadi anda mendapat:
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 );
NOTA: Memandangkan anda menggunakan pertanyaan SQL tersuai yang mana data/hasilnya tidak wujud secara umum/secara lalai dalam WooCommerce, tetapi hanya untuk anda, saya telah menggantikannya dengan nilai tetap 10 dalam jawapan saya. Laraskan mengikut keperluan!