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
-语句总是分解成一个true
或false
,一个=
是一个赋值
您的错误导致说 $_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。
- 您应该将包含更改为 include_once,这样文件将只包含一次。
$_SERVER['PHP_SELF'] 与 '/' 的比较毫无意义。而不是 '/' 尝试使用索引文件的路径。
另一种方法是使用 __FILE__
常量,但这仅适用于您的环境
<?php
if ($_SERVER['PHP_SELF'] == '/index.php'){
include_once('some-file.php');
}
?>
我只需要在我的网站主页上包含外部 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
-语句总是分解成一个true
或false
,一个=
是一个赋值
您的错误导致说 $_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。
- 您应该将包含更改为 include_once,这样文件将只包含一次。
$_SERVER['PHP_SELF'] 与 '/' 的比较毫无意义。而不是 '/' 尝试使用索引文件的路径。 另一种方法是使用
__FILE__
常量,但这仅适用于您的环境<?php if ($_SERVER['PHP_SELF'] == '/index.php'){ include_once('some-file.php'); } ?>