为什么是功能。主题的php加载了这么多次?我应该去哪里看看?
It doesn\'t, that\'s not how WP themes work. 如果手动加载functions.php
那就是为什么,但你不应该那样做。
WP负载functions.php
每个HTTP请求一次。请记住,浏览器可能会发出多个请求。E、 它可能会加载页面,然后用javascript发出AJAX请求。因此,如果您加载站点,并且站点发出5个AJAX调用,那么这是6个请求,而不是1个请求,所以functions.php
WP老化6次。
我唯一能想到的另一件事是,你已经修改了WordPress本身,以获得你想要的更改,永远不要这样做。使用主题插件操作和过滤器来更改WordPress的行为。
哪种方法是执行我描述的场景的正确方法?当用户/访问者进入站点时运行一次功能
您需要留下某种指示,表明访问者以前去过那里,也就是cookie。
我已经将这个问题的最后一部分分解为它自己的内容,因为它表明您对PHP程序的工作方式有一个根本性的误解。
然后使用全局变量或会话变量
PHP会话是一个坏主意,因为它仍然在用户端涉及一个cookie,所以它不会绕过cookie规则。它在许多主机上也不起作用,因为它们要么关闭此功能,要么缓存和优化不兼容。
那么为什么不使用全局变量呢
因为PHP不是这样工作的。PHP程序不像在后台运行的节点或Java CMS。没有持久的程序。
每次您发出请求时,都会启动一个PHP进程,from scratch, 每个请求都是一张白纸。存储在PHP中的变量将不可用,所有文件都将加载。
WordPress将通过对如何从数据库加载内容、为持久性存储提供API等方面保持智能来缓解这一问题。如果你有memcached或Redis服务器,你可以安装一个可以大大提高性能的对象缓存,但你不能只声明一个变量有一个值,然后期望它在下一个页面加载时仍有该值。在请求结束时,程序结束,所有内容都被清除。
那么什么是global
PHP中的变量
这个global
关键字是一种使变量在任何地方都可用而无需任何结构的方法。这是一种从稀薄的空气中提取东西的粗糙方法,可能会导致很多问题。这也不仅仅是PHP应用程序的一个特性,全局状态的祸害在许多编程语言中都是众所周知的。看看谷歌关于全球状态的清洁代码讲座,了解恐怖和危险。
您还将注意到,一些WP开发人员是“Singleton”的忠实粉丝。这是当他们把东西放在一个类中,这样看起来像是面向对象的,但实际上不是。然后他们给它一个静态方法,这样他们就可以像global
变量这是众所周知的反模式和不良做法。
那你该怎么办
这取决于你在做什么,你的问题非常简单。
If you want to know if a user has visited the site before:
<如果没有设置cookie,则设置cookie如果没有设置cookie,则他们以前从未到过这里。如果设置了cookie,则这不是他们第一次访问,但这都不是WordPress,对于所有CMS和语言都是相同的答案。
请注意,这并非万无一失,任何人都可以:
在匿名模式下访问,关闭浏览器中的Cookie,发送GDPR请求,要求您在其上拥有的所有数据,并且要删除这些数据,请使用其他人的设备
As for making a remote API request:
<不要在前端使用PHP,这会使您的站点速度非常慢,因为它必须等待远程服务器,然后才能用页面回复用户
major 因此,SEO成功了,请使用javascript进行操作。这就是谷歌分析处理事情的方式<如果用户以前访问过该站点,这将为测试打开其他选项,例如检查本地存储而不是使用cookie。这会大大加快速度,如果操作正确,服务器将永远无法匹配此速度。前端javascript不需要与WordPress有任何关系,因此,您不必将您的研究或帮助局限于WP