Wordpress member notification

时间:2019-02-15 作者:gora

我尝试实现一个功能,通知用户网页上的更改。我尝试使用会话来实现这一点,但效果不太好。例如:

用户可以参加活动。要做到这一点,他必须注册。因此,当时他的注册状态为“暂停”。在后端,我可以接受他的注册并将状态更改为“已接受”。现在,我希望用户在其仪表板上看到一个通知,表示他已被接受。

为此,我使用他的最后登录日期。我检查他的状态更改日期是否在上次登录日期之后。registration\\u通知的值存储在wp\\u会话变量中。这项工作没有问题。如果用户打开包含其注册列表的页面,则会重置此wp\\U会话变量。问题来了:

如果现在更改同一用户的第二次注册状态,则不会显示通知。

我的代码:

获取通知的函数:

if(!isset(wp_session[\'event\'])){    
wp_session[\'event\']= $wpdb->get_var(SELECT COUNT..... change_date > last_login_date);
}
显示通知:

if(wp_session[\'event\']!=-1){ echo  wp_session[\'event\']}
在概述页面上更改会话:

wp_session[\'event\']=-1;
我需要更改代码,以便在用户已经在线时识别通知量是否有变化。但我想不出怎样才能做到最好。

提前谢谢。

2 个回复
SO网友:Tom J Nowell

PHP仅在您请求页面时运行。当请求结束时,一切都消失了。它不像节点应用程序那样,同一个程序处理所有请求和变量,只需定义它们就可以跨页面持久化,因此使用$wp_session 变量将仅对该请求执行操作。

如果您导航到另一个页面,它必须从头开始重新加载WordPress,并重新整理所有内容。这就是代码无法工作的原因,也是所有PHP程序的工作方式。

如果要持久化某些内容,必须将其存储在某个位置,例如数据库、文件系统或对象缓存。这就是诸如登录用户的用户元之类的东西的用途。

有1个例外,PHP会话使用$_SESSION 变量,但WordPress不使用它们,需要进行一些设置。此外,它们与Varnish、Supercache等页面缓存解决方案不兼容。此外,并非所有主机都支持它。例如,PHP会话无法在WP引擎上正常工作。

其他注意事项:

PHP中的变量以开头$ 但你的不是因为某种原因。我本以为PHP会出现致命错误;, 您的show notification示例不会执行此操作,并且会生成语法错误wp_session 从未在任何地方创建,因此最初它是完全未定义的。这将在运行时生成警告和通知,以填充PHP错误日志

SO网友:Antti Koskinen

注册是否保存为数据库中的自定义帖子?

如果是这样,也许您可以有一个私有的分类法/术语调用“not\\u seen”。每当注册发生更改时,您都会将自定义条款附加到注册上。

然后将ajax添加到带有注册列表的页面中。当用户访问页面时,ajax会启动并从注册中取消设置“not\\u seen”术语。