要访问其他文件中的变量,最简单的方法就是按照Chip的建议,将变量全球化。
这与WordPress将全局变量$wpdb
在其他文件中可用。我已经看到你在给全球$wpdb
类中的变量。你需要做同样的事情。
在中创建实例时functions.php
:
global $p;
$p = new Plans();
在中引用全局实例时
header.php
,
footer.php
, etc:
global $p;
$p->get_purchased_plans();
考虑到这一点,我想澄清两件事:
这不是WordPress的问题是的,你在使用WordPress。是的,您正在尝试找出如何在WordPress中使用类。但这个问题并不是专门针对WordPress的。如果您只使用PHP(即单个index.php
包含以下内容的文件header.php
和footer.php
并进行动态引用)您仍然会遇到相同的问题。
你的问题是关于variable scoping, not关于WordPress。奇普早些时候说的完全正确。我在这里解释它,而不是在一个问题中,这样你就可以解释为什么了。
当你打电话的时候$p = new Plans()
在您的functions.php
文件,您正在创建Plans
对象并将其存储在名为$p
. 如果该变量是在函数中定义的(应该是这样),那么该变量是该函数的局部变量。如果它是在类中定义的,则它是该类的本地。
有时,您可能会意外地在全局范围中定义变量。。。这是PHP新手或刚刚开始面向对象编程的开发人员经常犯的错误。这本身不是一件坏事,但却是一个坏习惯。
如果需要访问直接局部作用域之外的变量,请始终always使用global
关键字使其可用。这就是说,请确保还以最小化名称冲突的方式命名全局变量。
$p
不是很独特。插件(或WordPress本身)很可能重新定义$p
作为一个实例以外的东西Plans()
后来在路上。那会打破你的主题。。。应该不惜一切代价避免!
类似于$chifiliii_plans_p
这将是一个更好的选择,因为我非常怀疑任何其他系统也会选择这个名称。
你做错了-自定义表不好在WordPress中使用自定义表是不好的。很少有在系统中保证自定义表的情况,在使用该平台的6年中,我只遇到过1到2个理由。
如果您的主题是要分发的,请记住有些人将无法使用它。一些安全顾问建议WordPress访问数据库的用户在功能上受到限制——在许多共享系统中,它首先不能创建表。
在多站点系统中,您不仅要为一个站点添加新表,还要为每个激活主题的站点添加新表这大大增加了数据库的大小,这可能会给一些用户(虽然不是所有用户)带来问题。
如果您直接对数据库运行自定义查询,那么您需要自己承担很多安全问题。WordPress本身非常安全。。。除非您做错了什么,否则很难让恶意用户对您的系统进行SQL注入和其他攻击。如果您自己运行查询(在WP_Query
API),然后您需要清理这些查询以防止恶意语句。
事实上,WordPress有一个Options API 已经
WordPress还支持Custom Post Types 用于存储自定义数据。
不要重新发明轮子。。。使用现有的工具帮助您解决问题。
2-不要在主题中包含功能
如果你在主题中加入了如此高级的功能,那你就是在为自己设置失败。如果用户停用您的主题,会发生什么情况?易于理解的突然,他们所有的自定义数据都消失了。
这个网站上已经多次提到:主题是为了提供styling 用于WordPress插件旨在提供functionality. 如果要存储自定义数据,请通过插件进行存储。使用主题可以设置该自定义数据的显示样式。