为了账号安全,请及时绑定邮箱和手机立即绑定

每次下 Woocommerce 订单时如何从插件调用 PHP 函数?

每次下 Woocommerce 订单时如何从插件调用 PHP 函数?

PHP
jeck猫 2023-10-15 14:52:55
在 WordPress 中,我安装了一个应用程序构建器插件,该插件允许我向应用程序发送推送通知,当电子邮件从网站发送到登录应用程序的当前用户的电子邮件地址时,它会自动发送推送通知插件允许我手动向不同的用户角色发送自定义推送通知 - 这很好。但问题是 - 我希望每次收到新的 Woocommerce 订单时都能够向“司机”用户角色发送自动推送通知。警告 - 我是一个新手(显然)。插件开发者给我提供了发送推送通知的功能,即:wpmobileapp_push($title, $message, $image_url, $page_url, $lang_2letters = 'all', $send_timestamp = '', $user_email = '');我使用的woocommerce_thankyou功能是每次客户进入“谢谢”页面时都会运行该功能。因此,经过一番调查后,我想出了以下函数(已添加到我的“function.php”中),该函数“应该”检查“驱动程序”用户是否已登录,并且应该调用发送推送通知的 php 函数每次发送新的 woocommerce 时都会发送给驱动程序,但这不起作用:/** * Add a notification when a new woocommerce order is recieved. * */add_action('woocommerce_thankyou', 'wpmobileapp_woo_order', 10, 1 );function wpmobileapp_woo_order($order_id) {        // Check if user is logged in.    if ( is_user_logged_in() ) {        // Get the user ID.        $user_id = get_current_user_id();        // Get the user object.        $user_meta = get_userdata( $user_id );        // If user_id doesn't equal zero.        if ( 0 != $user_id ) {            // Get all the user roles as an array.            $user_roles = $user_meta->roles;            // Check if the role you're interested in, is present in the array.            if ( in_array( 'driver', $user_roles, true ) ) {                           $order = new WC_Order( $order_id );            $items = $order->get_items();            $customer_address = $order->get_billing_address();             $user_email = $user_meta->user_email;            $image_url = '';            $link = '';                $title = "new order";            $message = $order . ', ' . $items . ', ' . $customer_address;                wpmobileapp_push($title, $message , $image_url, $link, $lang_2letters = 'all', $send_timestamp = '', $user_email);                        }        }    }}我尝试了很多不同的方法来尝试让这项工作自己完成,以便让它在每次下新订单时向司机使用角色类型发送自动通知,但没有任何效果。一些帮助将不胜感激。
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

好的,处理此问题的最佳简单方法是向所有登录的驱动程序用户发送推送通知。基本上,查询在 WordPress 中具有驱动程序角色的运行会话的所有用户。然后,迭代这些尝试向每个人发送通知。像这样更改函数:


/**

 * Add a notification when a new woocommerce order is recieved.

 *

 */

add_action('woocommerce_thankyou', 'wpmobileapp_woo_order', 10, 1 );


function wpmobileapp_woo_order($order_id) {

    

    

  $order = new WC_Order( $order_id );

  $items = $order->get_items();

  $customer_address = $order->get_billing_address();

 

  $user_email = $user_meta->user_email;

  $image_url = '';

  $link = '';

    

  $title = "new order";

  $message = $order . ', ' . $items . ', ' . $customer_address;


  // get all users with role 'driver' and an active WP session:

  $drivers = get_users([

    'role' => 'driver',

    'meta_key' => 'session_tokens',

    'meta_compare' => 'EXISTS'

  ]);

  // notify each of these by push notification

  foreach ($drivers as $driver) {

    $driver_email = $driver->user_email;

    wpmobileapp_push($title, $message , $image_url, $link, $lang_2letters = 'all', $send_timestamp = '', $driver_email);

    error_log("WooCommerce Driver notification: sending push notification to account of $driver_email");

  }

}

您可以启用WP_DEBUG并WP_DEBUG_LOG检查哪个驱动程序帐户应该收到推送通知。如果存在日志消息,但您的测试驱动程序用户没有收到通知,可能您需要进一步测试此 wpmobileapp_push 内容。

查看完整回答
反对 回复 2023-10-15
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信