使用「woocommerce_thankyou」鉤子時,儲存SQL查詢結果的貼文元數據
P粉080643975
P粉080643975 2024-03-31 21:34:04
0
1
484

我正在嘗試查詢資料庫並將結果傳遞到 update_post_meta 函數。但是不確定我是否正確構建了這個,或者我的 $order_id 使用是否存在問題?

一旦下訂單,我需要使用當前登入使用者和目前訂單的查詢結果更新帖子元,因此認為 woocommerce_thankyou 掛鉤有意義,但是在完成訂單後不會寫入帖子元。 < /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);
}

了解有關如何最好地處理此問題的任何建議嗎?

P粉080643975
P粉080643975

全部回覆(1)
P粉256487077

您的程式碼嘗試包含多個錯誤和錯誤:

  • woocommerce_thankyou 是一個操作鉤子,而不是過濾器鉤子
  • 僅將 $order_id 傳遞給回呼函數,$result 不適用
  • 使用 $wpdb->prefixb03_,這可以使其動態
  • $wpdb 是一個物件
  • 使用 global $woocommerce、$post; 是多餘的

所以你得到:

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 );

注意:因為您使用的是自訂SQL 查詢,其中資料/結果在WooCommerce 中一般/預設情況下不存在,但僅針對您而言,我已將其替換為我的回答固定值10。 根據需要進行調整!

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板