PHP仅包含在主页URL上

时间:2016-02-08 08:53:25

标签: php wordpress php-include

我只需要在我网站的主页上包含外部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');
?>

它仍然没有出现。

7 个答案:

答案 0 :(得分:5)

您可以使用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');
   }

?>

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

答案 1 :(得分:2)

您的代码存在以下几个问题:

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

如前所述,您的比较(==)并不正常,因为您实际上正在使用赋值(=)。

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

所以你必须挑出你的文件,当然要使用正确的比较方式。所以脚本看起来可能类似于以下内容:

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

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

答案 2 :(得分:0)

if - 语句总是分为truefalse,一个=是作业

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

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

答案 3 :(得分:0)

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

&#39; PATH_INFO&#39;可能就是你想要使用的东西:

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

答案 4 :(得分:0)

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

如果2是您的主页ID,则在标题

之后的模板文件中写下以下代码
<?php
   if (get_the_ID() == 2)
   include('some-file.php');
?>

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

答案 5 :(得分:0)

在条件中使用let byteCount = 1000 * sizeof(Float) let sharedMetalBuffer = self.metalDevice.newBufferWithLength(byteCount, options: .StorageModeShared) 。当您在指定为主页的页面上时,返回true。不要使用is_front_page()。这将返回博客文章存档页面。

我知道......混淆吧?但那是你的WordPress。

答案 6 :(得分:0)

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

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