Php 在所有WordPress页面上使用变量的最佳方式

Php 在所有WordPress页面上使用变量的最佳方式,php,wordpress,variables,global-variables,Php,Wordpress,Variables,Global Variables,我正在构建一个自定义主题,其中包含许多我希望在整个过程中使用的变量 例如: $tv = $options['tv']; $movies = $options['movies']; $print = $options['print']; //....and about 50 more. 为此,我只是简单地将它们都放在一个名为vars.php的文件中,然后放在主题的header.php中,我将其包括在内 require_once('vars.php'); 虽然这确实有效,但感觉不是最好

我正在构建一个自定义主题,其中包含许多我希望在整个过程中使用的变量

例如:

$tv     = $options['tv'];
$movies = $options['movies'];
$print  = $options['print'];
//....and about 50 more.
为此,我只是简单地将它们都放在一个名为vars.php的文件中,然后放在主题的header.php中,我将其包括在内

require_once('vars.php');
虽然这确实有效,但感觉不是最好的方法。我在很多场合读到过使用全局变量(大概在functions.php中)不是一个好主意,但这是真的吗

但是如果可以在functions.php中使用全局变量(甚至很多),这是正确的方法吗

global $tv;
$tv     = $options['tv'];

global $movies
$movies = $options['movies'];

global $print
$print  = $options['print'];

在functions.php中创建一个返回变量数组的函数怎么样


示例:
$options=get_my_custom_vars()

我假设您想要全局变量,在全局变量中,它使用所有变量组成一个数组。要使用它:

$GLOBALS['your-varriable']
资料来源:
最好的方法是在functions.php或插件的主插件文件中明确定义所有变量我已经验证了这是包括akismet在内的大多数流行插件的使用方式。特别是您需要这样做

define( MYVAR_TV, $options['tv'] );
define( MYVAR_MOVIES, $options['movies'] );
define( MYVAR_PRINT, $options['print'] );
在这些之后,你可以随心所欲地使用它们

echo MYVAR_TV;

希望能有帮助

可以使用global,但不鼓励使用global(您可以在这里阅读更多内容)。可以考虑单点实现:

<?php
class GlobalVariable {
    /**
     * @var array
     */
    public static $option = [];
}

// You can set the variable using this way
GlobalVariable::$option['movies'] = 1;

// And get the variables using that array
print_r(GlobalVariable::$option);
我个人喜欢使用。通过wpml插件修改并使其可翻译也很有用

这些选项将可在后端的“选项页”中添加/编辑,或按照链接中的说明进行编程

在通过functions.php初始化插件之后

if( function_exists('acf_add_options_page') ) {

acf_add_options_page();

}
只需在模板中通过

<?php the_field('header_title', 'option'); ?>

  • 这些示例摘自Acf选项页面文档
  • 请记住,必须安装才能使其正常工作

您也可以实现自定义流包装器。通过这种方式,您可以使用诸如
file\u get\u contents
file\u put\u contents
fread
fwrite
等功能访问和存储数据,就像从文件读写,或从远程URL获取信息一样

实际上,PHP手册中有一个示例。但是,让我们按照完整性的顺序将其拉出来,并使其适应WP中的用例和使用示例

我喜欢的电影:

Impressum:

我知道一开始它可能看起来像很多样板文件,但由于关注点的分离,您不仅限于使用常量之类的标量值,而且您的流包装器可以是您喜欢的任何数据存储的适配器,而不仅仅是内存中或存储在WordPress选项表中。使用自定义函数可以简化对单例类编写如此长的调用,或者在任何需要访问自定义数据的地方调用全局函数的麻烦


实际上,如果您阅读PHP手册中的示例,您会发现一个使用包装器存储整个文本的示例,您可以使用
include
调用它。没有什么可以阻止您使用甚至是序列化的数据,例如使用
json_encode
/
json_decode
,并与包装器一起存储,甚至可以直接在数据库中轻松存储。另一个例子是使用PDO从数据库写入/读取数据,但很容易移植到使用WordPress
$wpdb
对象。

所有变量都将始终被视为“已设置”。你使用了错误的语法。Eep!感谢良好的发现-修复。@user3256143您应该接受答案。@user3256143这是最佳实践。进一步来说,您可以创建一个短代码,从所见即所得(WYSIWYG)访问变量。如果您的数据只是标量,这很好,在PHP 7.0之前,它甚至不能与简单数组一起工作。这让我想到使用自定义流。您认为我关于使用自定义包装器的答复如何?欢迎任何反馈!答案很好,如果只使用内存中的变量,那么就切中要害了。这保留了原始海报解决方案的一些缺点。即:无法检测数组键中的键入错误(
$option['novies']
)。另外:如果变量的内容不变,我建议@shazyriver使用
define()
方法。这样可以使用多种类型的变量。如果您不想更改您的值,请看一下单例实现。这可能有点抽象,但这是一个更好的方法。