我写函数:
add_action( 'woocommerce_order_status_completed', 'order_completed');
function order_completed($order_id) {
$user_id = $order->get_user_id(); // or $order->get_customer_id();
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $item ) {
$product_name = $item->get_name();
}
switch ($product_name) {
case 'FREE':
update_user_meta($user_id, 'ads-available', get_user_meta( $user_id, 'ads-available', true ) +1 );
break;
case 'VIP':
update_user_meta($user_id, 'ads-available', get_user_meta( $user_id, 'ads-available', true ) +3 );
update_user_meta($user_id, 'karusel', get_user_meta( $user_id, 'karusel', true ) +1 );
break;
}
}
当我从仪表板更改状态顺序时,出现错误:
类型错误:E_ERROR行102文件 /var/www/ /data/www/web-design.com/wp-content/plugins/functions.php.未捕获错误:调用成员函数get_user_id()在 /var/www/ /data/www/web-design.com/wp-content/plugins/functions.php中为空:102堆栈跟踪:#0 /var/www/ /data/www/web-design.com/wp-includes/class-wp-hook.php(294):order_completed(862)#1 /var/www/ /data/www/web-design.com/wp-includes/class-wp-hook.php(316):WP_Hook-
行102它是-$user_id=$order-
您只是错过了钩子函数中的第二个参数,即$order
,即WC_Order
Object,因此$order=wc_get_order($order_id);
不需要,您的错误将得到解决。
我重新访问并简化了您的代码:
add_action( 'woocommerce_order_status_completed', 'order_completed_update_user_meta', 10, 2 );
function order_completed_update_user_meta( $order_id, $order ) {
// Check that user Id exist (registered users only)
if( $user_id = $order->get_user_id() ) {
$items = $order->get_items(); // Get order items
$item = reset($items); // Get first order item
$name = $item->get_name(); // Get first product name
$value = get_user_meta( $user_id, 'ads-available', true ); // Get user meta 'ads-available'
if ( $name === 'FREE' ) {
update_user_meta($user_id, 'ads-available', $value + 1 );
}
elseif ( $name === 'VIP' ) {
update_user_meta($user_id, 'ads-available', $value + 3 );
$karusel = get_user_meta( $user_id, 'karusel', true ); // Get user meta 'karusel'
update_user_meta($user_id, 'karusel', $karusel + 1 );
}
}
}
代码进入活动子主题(或活动主题)的functions.php文件。它应该更有效。
您可以使用\u customer\u user
元键。获取用户id。
add_action( 'woocommerce_order_status_completed', 'order_completed' );
function order_completed( $order_id ) {
$user_id = get_post_meta($order_id, '_customer_user', true);
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $item ) {
$product_name = $item->get_name();
}
switch ($product_name) {
case 'FREE':
update_user_meta($user_id, 'ads-available', get_user_meta( $user_id, 'ads-available', true ) +1 );
break;
case 'VIP':
update_user_meta($user_id, 'ads-available', get_user_meta( $user_id, 'ads-available', true ) +3 );
update_user_meta($user_id, 'karusel', get_user_meta( $user_id, 'karusel', true ) +1 );
break;
}
}
或者你需要先得到订单对象,然后你可以使用$order-
add_action( 'woocommerce_order_status_completed', 'order_completed' );
function order_completed( $order_id ) {
$order = wc_get_order( $order_id );
$user_id = $order->get_user_id(); // or $order->get_customer_id();
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $item ) {
$product_name = $item->get_name();
}
switch ($product_name) {
case 'FREE':
update_user_meta($user_id, 'ads-available', get_user_meta( $user_id, 'ads-available', true ) +1 );
break;
case 'VIP':
update_user_meta($user_id, 'ads-available', get_user_meta( $user_id, 'ads-available', true ) +3 );
update_user_meta($user_id, 'karusel', get_user_meta( $user_id, 'karusel', true ) +1 );
break;
}
}
从以下行代码输入: 如何从订单id获取WooCommerce订单详细信息?
我在有以下规格的空气间隙环境中清除了rke: 节点: 主机类型/提供程序:VirtualBox(测试环境) cluster.yml文件: 复制的步骤: docker网络 问题是否与网络接口有关?如果是:我如何创建它?
我需要对我的商店进行一些定制,但我不知道如何使用WC_Order类在PHP中创建WooCommerce订单。我怎样才能做到这一点? 这是我尝试过的代码:
1.自动收货完成如何设置? 商家可以在【交易设置】里面设置自动确认收货时间,从发货时间开始后粉丝没有在手机端点击确定收货,后台系统到时间自动确定收货。 2.订单可以修改价格吗? 订单在待付款状态下可以修改价格。 3.已经完成的订单为什么自动就关闭? 用户通过额外方式导入的订单数据,导入的订单数据为待支付状态,订单的创建时间到现在时间超出了订单自动关闭时间 所以订单自动关闭了。 4.支付时,扫码提示
问题内容: 我知道我可以打电话获取最新的Jenkins版本的状态。但是,由于我们的构建运行了很长时间(几个小时),所以我对最后一个 完整的 构建状态确实比在 此刻 正在 运行 的运行更感兴趣。 最后一个完全运行的构建是否有api端点?还是我应该拉动构建的完整列表并从那里选择倒数第二个? 问题答案: 尝试http:// $ host / job / $ jobname / lastSuccessfu
我正在尝试使用状态将一个表单输入值复制到另一个表单输入值,但状态没有更新 我创建了一个带有按钮的表单,其中左侧表单输入的值应复制到右侧表单输入。这是我的代码: 无论我做什么,dbSecName的状态都不会改变。我试着设置一个新的常量。我尝试使onclick函数异步并等待。如果我为我试图设置的变量的值添加,我可以正确地看到它,但是dbSecName的console.log总是显示原始值。 我真的不知