PHP 仅包含在主页上 URL

PHP include only on homepage URL

我只需要在我的网站主页上包含外部 php 文件。

但是,由于网站上的所有页面都使用相同的页面模板(主页模板),我无法基于此过滤它们,所以我想知道是否有办法仅在主页上包含 PHP 文件URL(即 www.domain.com/folder)并且不在任何其他页面上显示它(例如 www.domain.com/folder/lorem)。

我尝试在我的 header.php 文件中使用此片段:

<?php
   if ($_SERVER['PHP_SELF'] = '/')
   include('some-file.php');
?>

并且该文件也包含在所有其他页面中。

我是一个 PHP 新手,很抱歉,如果这是一个愚蠢的问题:)

更新: 我确实将其更改为

<?php
   if ($_SERVER['PHP_SELF'] == '/')
   include('some-file.php');
?>

它仍然没有出现。

if-语句总是分解成一个truefalse,一个=是一个赋值

您的错误导致说 $_SERVER['PHP_SELF'] IS '/',因此为真。

您必须使用 == 进行比较或使用 === 进行类型安全比较。

您可以使用WordPress的is_front_page()功能来检查。

因此,您的代码应该是:

<?php

    // if code does not work, adding the next line should make it work
    <?php wp_reset_query(); ?>

    if ( is_front_page() ) {
    include('some-file.php');
}

?>

来源:https://codex.wordpress.org/Function_Reference/is_front_page

或者,如果上述方法不起作用,您可以尝试:

if ( $_SERVER["REQUEST_URI"] == '/' ) {
    include('some-file.php');
}

作为最后的手段,尝试使用插件将 PHP 直接插入页面,其中一个插件是 https://wordpress.org/plugins/insert-php/

更新:经过评论的阐述,我想出了一个替代方法,如下所示。

对于您的情况,这可能有效。这段代码会先得到URL,然后解析它得到目录,并将目录分配给$directory。如果是主页上的,则不会设置$directory,因此包括some-file.php

<?php

   // Get URL
   $link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

   // Get Directory (eg. will return 'folder' in example.com/folder/files)
   $parts = explode('/', $link);
   $directory = $parts[3];

   // If $directory is null, include PHP (eg. example.com, there is no directory)
   if ($directory == ''){
      include('some-file.php');
   }

?>

希望以上方法对您有所帮助,谢谢!

您的代码有几个问题:

<?php
   if ($_SERVER['PHP_SELF'] = '/')
   include('some-file.php');
?>

如前所述,您的比较 (==) 不起作用,因为您实际使用的是赋值 (=)。

其次,超级全局变量 $_SERVER['PHP_SELF'] 永远不会只包含 /,因为该变量将包含当前正在执行的文件的路径和文件名,如 documentation 中所述.

所以你要挑出你的文件,当然要用正确的比较方式。所以脚本可能看起来像下面这样:

<?php
   if (basename($_SERVER['PHP_SELF']) == 'index.php')
   include('some-file.php');
?>

当然,如果您在不同的目录中有多个 index.php 文件,这将无法按预期工作。

来自: http://php.net/manual/en/reserved.variables.server.php

'PATH_INFO'大概就是你要用的:

包含任何客户端提供的路径名信息,在实际脚本文件名之后但在查询字符串之前(如果可用)。例如,如果通过 URL http://www.example.com/php/path_info.php/some/stuff?foo=bar 访问当前脚本,则 $_SERVER['PATH_INFO'] 将包含 /some/stuff.

对于每个wordpress页面都有一个id。所以你可以根据id写这个条件 (1)请找到您的首页id

如果 2 是您的主页 ID 那么在模板文件中 header

之后写入以下代码
<?php
   if (get_the_ID() == 2)
   include('some-file.php');
?>

要了解有关 get_the_ID() 的详细信息,请阅读此 https://developer.wordpress.org/reference/functions/get_the_ID/

在条件中使用 is_front_page()。当您位于您指定为主页的页面时,这 returns 为真。不要使用 is_home()。 returns 博客 post 存档页面。

我知道......令人困惑吧?但那是适合你的 WordPress。

  1. 您应该将包含更改为 include_once,这样文件将只包含一次。
  2. $_SERVER['PHP_SELF'] 与 '/' 的比较毫无意义。而不是 '/' 尝试使用索引文件的路径。 另一种方法是使用 __FILE__ 常量,但这仅适用于您的环境

     <?php
      if ($_SERVER['PHP_SELF'] == '/index.php'){
          include_once('some-file.php');
      }
     ?>