【问题标题】:How do I declare a global variable in PHP I can use across templates?如何在 PHP 中声明一个可以跨模板使用的全局变量?
【发布时间】:2012-09-20 06:19:11
【问题描述】:

在 wordpress 中,它调用 header.php,然后调用任何模板名称或请求的页面。如何在我的 php 标头中声明一个变量,然后我可以在其他模板中引用该变量?

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    答案很大程度上取决于您需要它来做什么。如果您正在开发一个主题并希望在所有文件中保持值不变,您可以将它们放在主题目录中的functions.php 中,该目录始终被加载。在那里定义的变量应该在主题中的任何地方都可用。如果您分发主题,这将有效。

    如果您想在自己的安装中根据需要修改现有主题,您可以按照建议将它们放入wp-config.php,或者(更简洁的方法)您可以在您要更改的主题的create a child theme .这将使其与 wordpress 核心分开,并防止主题更新覆盖您的更改。

    我刚刚用functions.php试了一下:

    functions.php:

    $variable = "value";
    

    header.php:

    global $variable;
    echo $variable;
    

    为我工作。

    【讨论】:

    • 好的,但是我如何实际声明它,因为我在functions.php和wp-config中都尝试了全局$domain = 'http://mydomain.comglobal $domain = 'http://mydomain.com,然后我在标题中尝试了echo $domain; 。 php,它是空的
    • 正确的语法是:global $variable; $variable = "value";。我不认为global 是必要的。
    • 所以我先声明它是全局的,然后定义它?或者你的意思是当我回显时我必须回显全局 $variable?
    • 我并不完全正确,需要全局,而是在模板文件中而不是在定义中。答案已更新。
    • 这里的正确方法:WP Forum thread - 我发现如果你愿意,你可以在说 page.php 而不是 functions.php 中声明值(只需在调用 wp_head() 之前声明它)跨度>
    【解决方案2】:

    你可以这样声明(在functions.php中):

    global $domain;
    $domain = 'http://www.mydomain.com/';
    

    不过,您可以像这样回显 WordPress 网站的域..

    <?php bloginfo('site_url');?>
    

    或者

    $url = site_url();
    echo $url;
    

    或者作为一个函数,在functions.php中

    function displayMyDomain() {
      global $domain; // you probably don't actually need to set it global as it is a function
      $domain = 'http://www.domain.com/';
      echo $domain;
    }
    

    然后在任何地方,使用&lt;?php displayMyDomain(); ?&gt;

    【讨论】:

    • 好的,我刚试过global $domain='http://mydomain.com;,它不喜欢那样。
    • 你不能那样做 - 全局 $domain;然后 $domain = 'x';会工作。并不是说我不能给变量 $domain 赋值并声明它是全局的。
    • 啊,我解决了。我在别的地方声明。然后我在我的模板中使用它来声明它是全局的,然后可以回显它。所以我现在的问题是,全球这个词有什么作用?然后php会查看当前页面使用的所有文件并找到变量吗?
    • global 关键字在通常不可用的上下文中提取变量,例如在函数内部。详见文档:php.net/manual/en/language.variables.scope.php
    • 我注意到您希望它成为域。您不能只使用 WP 功能来获取它还是自定义的?注意我更新的答案。
    【解决方案3】:

    您可以在wp-config.php 文件中定义它们。

    配置文件永远不会更新,因此您的 Wordpress 安装会随着时间的推移而包含这些变量,即使您更新它。

    <?php
      require_once('wp-config.php');
      echo $domain;
    ?>
    

    【讨论】:

    • 好的,但是我如何实际声明它,因为我在 wp-config 中尝试了 global $domain = 'mydomain.com 和 global $domain = 'mydomain.com,然后我尝试了 echo $domain;在我的 header.php 中,它是空的
    • 我宁愿拥有它 functions.php 因为它总是被调用。不能在函数中声明,在header.php中再次使用吗?
    • 您可以在functions.php 中为该自定义主题添加它,但您将无法在其他主题中使用它们。
    • 那很好,但是怎么做呢?我如何最初声明它以及如何调用它?
    • 就像我说的,让$domain = 'http://www.mydomain.com'; 然后从我的答案中调用代码。
    【解决方案4】:

    另一种在 Wordpress 中定义全局常量的方法,如果出于最佳实践目的,您不想在 WP-config 中添加变量(以保持干净?)。并且由于某些原因,您的变量范围并没有在您的网站的任何地方获得全局范围。

    你可以简单地使用:

    define( 'MY_VARIABLE', 'My Value' );
    

    有关 consts 范围的更多信息: http://php.net/manual/en/language.constants.php

    【讨论】:

    • 这是唯一对我有用的东西。在 WordPress 模板中使用它。使用 global 或 $GLOBALS 不起作用!不知道为什么!
    【解决方案5】:

    我认为 php session 是在 Wordpress 上用作全局变量的方式之一。

    1.函数.php

    if(!session_id()) {
        session_start();
    }
    

    2。您要设置或获取全局变量的任何 .php 文件

    • 获取变量

      if(isset($_SESSION['global_var'])) {
          $local_var = $_SESSION['global_var'];
      }
      
    • 设置变量

      $_SESSION['global_var'] = "This is global var";
      

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 2011-03-22
      • 2011-02-12
      • 2019-09-11
      相关资源
      最近更新 更多