Simpan metadata siaran untuk hasil pertanyaan SQL apabila menggunakan cangkuk "woocommerce_thankyou".
P粉080643975
P粉080643975 2024-03-31 21:34:04
0
1
472

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粉080643975
P粉080643975

membalas semua(1)
P粉256487077

Percubaan kod anda mengandungi berbilang pepijat dan ralat:

  • woocommerce_thankyou ialah cangkuk aksi, bukan cangkuk penapis
  • Sahaja $order_id 传递给回调函数,$result T/T
  • Gunakan $wpdb->prefixb03_, ini boleh menjadikannya dinamik
  • $wpdb ialah objek
  • Menggunakan global $woocommerce、$post; adalah berlebihan

Jadi 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!

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan