从functions.php中的代码中检索wordpress中的当前orderid

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (35)

我在functions.phpWordpress / Woocommerce项目中有一些代码,我尝试根据USER ID和ORDER ID更新自定义数据库表:

global $wpdb;
$table = $table="wp_thegraffitiwall";
$user = get_current_user_id();


if($user == 0)
    exit();

echo "Current User ID is ";
echo $user;

echo "Current Order ID is ";


$wpdb->update($table,$updateStuff,['userid'=>$user]);

// $wpdb->update($table,$updateStuff,['userid'=>$user] AND 'orderid'=>#orderid);

exit("Saved!");

如您所见,我可以检索当前的用户ID并使用它,但我无法获取当前的ORDER ID。

我在Stackoverflow上搜索并尝试了以下方法:

$order->get_id();

但这不起作用。

我想将当前的ORDER ID分配给$ order_id,然后在我目前已注释掉的更新功能中使用它。

提问于
用户回答回答于

订单ID仅存在于订单收到(谢谢)页面和前端的我的帐户>订单视图页面(对于当前用户)。所以你的代码有点不完整,因为它应该在一个钩子函数中,如果在你的主题的function.php文件中使用的话。

现在您可以尝试使用其中一个钩子函数,在这里您需要添加与$updateStuff变量相关的必要代码。结账后创建订单时,这两个功能都会被触发。

第一种选择 (你可以直接使用 $order_id 它作为一个参数)

add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_update_order', 25, 2 );
function custom_checkout_update_order( $order_id, $data ) {
    global $wpdb;

    // Get the user ID from the Order
    $user_id = get_post_meta( $order_id, '_customer_user', true );

    $updateStuff = 'something'; // <===  <===  <===  <=== HERE you add your code

    $wpdb->update( 'wp_thegraffitiwall', $updateStuff, array('userid' => $userid) );
}

代码位于活动子主题(或活动主题)的function.php文件中。

或者这个 (你可以直接使用 $order_id 它作为一个参数)

add_action( 'woocommerce_thankyou', 'custom_thankyou_action', 20, 1 );
function custom_thankyou_action( $order_id ) {
    if ( ! $order_id ) return; // Exit

    global $wpdb;

    // Get the user ID from the Order
    $user_id = get_post_meta( $order_id, '_customer_user', true );

    $updateStuff = 'something'; // <===  <===  <===  <=== HERE you add your code

    $wpdb->update( 'wp_thegraffitiwall', $updateStuff, array('userid' => $userid) );
}

代码位于活动子主题(或活动主题)的function.php文件中。

扫码关注云+社区

领取腾讯云代金券