是否可以将外部 PHP 文件包含到自定义模板中?
我正在尝试将博客添加到我的网站中。 我的站点中已经有了页眉、页脚和侧边栏布局。 我可以在我的自定义模板中使用它们吗?
<?php
/*
Template Name: Blog
*/
?>
<?php include( PATH . 'http://www.example.com/includes/header.php' ); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
<h2><a href="https://wordpress.stackexchange.com/questions/111628/<?php the_permalink() ?>">
<?php the_title(); ?>
</a></h2>
<?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
<div class="entry">
<?php the_content(); ?>
</div>
<div class="postmetadata">
<?php the_tags('Tags: ', ', ', '<br />'); ?>
Posted in
<?php the_category(', ') ?>
|
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?>
</div>
</div>
<?php endwhile; ?>
<div class="mypagination">
<?php include (TEMPLATEPATH . '/inc/nav.php' ); ?>
</div>
<?php else : ?>
<h2>Not Found</h2>
<?php endif; ?>
<?php include( PATH . 'http://www.example.com/includes/sidebar.php' ); ?>
<?php include( PATH . 'http://www.example.com/includes/footer.php' ); ?>
我也试过:
<?php include('http://mywebsite.com/includes/header.php'); ?>
不,您不能按照您指定的方式将 PHP 文件包含在主题中。
要了解原因,我们所要做的就是运用一些常识和基本的批判性思维:
- 您将向远程服务器发出远程请求
include
不能这样做 - 如果奇迹般地起作用了,你就会有一个主要的安全漏洞,因为我可以做这样的事情:
include( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;
. 想象一下破解网站是多么容易! 什么能阻止我,包括facebook.com/index.php
? - 如果即使那样它也能以某种方式工作,并且它是安全的,想象一下它的缓慢! 您向服务器发出请求,然后服务器开始为页眉发出一个请求,为侧边栏发出另一个请求,为页脚发出另一个请求,所有这些等待,谁会被打扰?
- 但最后,即使 include 可以发出远程请求。 它不能,为什么它会返回 PHP 代码? 它不会返回服务器吐出的内容,也就是最终确定的 html 吗? 服务器在返回之前运行任何 PHP,因此您包含的内容中没有 PHP。
所以不,这是不可能的。 但是,将您问题中的代码快速复制粘贴到 PHP 脚本中,然后快速访问会比这里的任何人都更快地告诉您。
相反,您只能包含来自您的服务器当前运行的本地文件系统的文件。 您永远不会将 URL 传递给 include 或 require 语句。
所以如果我在 index.php 中,并且在同一个文件夹中有一个名为 sidebar.php 的文件,我会像这样包含它:
include('sidebar.php');
include
如果失败则返回一个值。 include 语句的语义是通用的基本 PHP,在这个问答网站上是题外话。
但是,我保留了这个问题,因为您应该使用一个 WordPress API 函数,它比 include 和 require 更好地满足您的需要。
要在主题中包含模板部分,请使用:
get_template_part( 'partname' );
此函数还将查看您指定部分的子主题或父主题。
例如,在这段代码中:
get_template_part( 'sidebar', 'first' );
它会寻找并包括它找到的第一个:
- 儿童主题
sidebar-first.php
- 父主题
sidebar-first.php
- 儿童主题
sidebar.php
- 父主题
sidebar.php
应该注意的是,您应该只使用 get_template_part 来包含模板文件。 不要用它来包含诸如库之类的文件,或者其他不输出 html 的 PHP 文件。
我建议您在继续之前阅读以下主题:
- PHP.Net 上的 include 和 require 函数
- 父子主题
- 模板层次结构以及 WordPress 如何选择要使用的模板
<?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
get_template_part
- 这
WP_HTTP
API,在那些真正的时代,你真的需要对 API 进行远程请求。 功能如wp_remote_get
和wp_remote_post
将在这里提供帮助。 - PHP调试。 您的白页是 PHP 致命错误,但是因为您将错误日志记录设置为从前端隐藏它,所以它被记录到您不知道的错误日志文件中。 找到你的错误日志,定义
WP_DEBUG
在你的wp-config.php
并安装诸如调试栏或查询监视器之类的插件,这些将对您有很大帮助。 确保你打电话wp_footer
虽然在您的模板页脚中。
假设你有这个场景:
您的 wordpress 安装作为您的站点托管在“www”根文件夹中,而您的 header.php 位于“www/includes”文件夹中。
在你的 wordpress 主题中,只需添加
<?php include('includes/header.php'); ?>
当 WordPress 读取主题文件时,它使用根路径。

