我正在使用woocommerce rest api和PHP libray,我只是在网页上显示订单。
我希望在收到新订单时提供声音提醒。
我可以稍后处理声音,但是为了进行测试,我需要弄清楚如何检查是否有新订单。
随着api呼叫:
$new_order_count = $connect->orders->get_count();
只需返回一个包含订单数的整数,因此每次增加此int时我都需要做一些事情。
我已经绞尽脑汁在这周围,并且无法弄清楚我会怎么做。
答案 0 :(得分:2)
您正在有效地询问有关如何检测系统更改的输入。通常有两种方法:轮询和推送。您提供的一点点解决方案与轮询类似。
要进行轮询,您需要在某处存储旧值。由于您使用的是PHP,因此您可以将其存储在数据库中,也可以将其存储在页面本身中;这取决于你正在做什么来触发民意调查(你正在使用什么样的间隔)。
一种解决方案涉及每次用户导航到新页面时检查订单计数。这是最简单的解决方案,因为您正在使用wordpress,但您需要找到一个位置来存储旧值(旧订单计数)。订单计数可以作为查询参数包含在每个链接中(很难正确),也可以存储在数据库中(更多涉及wordpress的内容)。
您可以使用AJAX和JavaScript计时器或间隔来轮询基于时间的间隔。这将是任意响应(您可以调整它以在指定的时间段内识别新订单),但重复的请求将是低效的。此外,如果用户在新订单到达之后但在轮询检测到之前导航,您还需要实施第一个解决方案的一部分或冒险错过新订单。此方法简化了旧值的存储,因为您可以将其保存在JavaScript变量中。
答案 1 :(得分:0)
因此,克服我的问题的一种廉价而讨厌的方法是使用eth html5音频元素,并在页面加载时检测到会话时使用自动播放标记回显元素。
示例:
PHP要求订单计数:
if(isset($_SESSION['order_count'])) {
if ($new_order_count->count > $_SESSION['order_count']) {
$_SESSION['order_alert'] = '<div class="alert alert-dismissible alert-success"><strong>New Order(s)</strong> We have new orders team! </div>';
$_SESSION['order_count'] = $new_order_count->count;
} else {
unset($_SESSION['order_alert']);
}
}
检查order_count会话是否在页面加载时设置,如果是,它将从woocommerce获取订单计数并查看它是否大于会话中存储的当前计数,如果是,则创建新的警报会话并且使用新订单计数更新当前计数会话。
如果未检测到新订单,则触发else语句取消设置警报会话。
主页:
if(isset($_SESSION['order_alert'])) {
echo $_SESSION['order_alert'];
echo '<audio autoplay>
<source src="alert.mp3" type="audio/mp3" />
</audio>';
}