将外部PHP文件包含到WordPress自定义模板中

时间:2013-08-26 作者:Jeremi Liwanag

是否可以将外部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="<?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 &#187;\', \'1 Comment &#187;\', \'% Comments &#187;\'); ?>
  </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\'); ?>

6 个回复
SO网友:Tom J Nowell

不可以,您不能以指定的方式在主题中包含PHP文件。

要了解原因,我们所要做的就是运用一些常识和基本的批判性思维:

您将对远程服务器执行远程请求include 无法做到这一点,如果它奇迹般地奏效,你就会有一个重大的安全漏洞,因为我可以这样做:include( \'http://yoursite/wp-config.php\' ); echo DB_PASSWORD;. 想象一下,入侵网站是多么容易!有什么能阻止我包括facebook.com/index.php ?

相反,您只能包含服务器当前运行的本地文件系统中的文件。您永远不会将URL传递给include或require语句。

所以如果我在索引中。php,并且在同一文件夹中有一个名为sidebar的文件。php,我会像这样包括它:

include(\'sidebar.php\');
include 如果此操作失败,则返回一个值。include语句的语义是通用的基本PHP,与本问答无关;一个站点。

然而,我没有回答这个问题,因为您应该使用一个WordPress API函数,它比包含和要求更好。

要在主题中包含模板部件,请使用:

get_template_part( \'partname\' );
此函数还将查看指定零件的子主题或父主题。

例如,在此代码中:

get_template_part( \'sidebar\', \'first\' );
它将寻找并包括第一次发现的:

儿童主题sidebar-first.phpsidebar-first.phpsidebar.phpsidebar.php应该注意的是,您应该只使用get\\u template\\u part来包含模板文件。不要使用它来包含库等文件,或其他不输出html的PHP文件。

我建议您在继续之前阅读以下主题:

PHP上的include和require函数。Net父主题和子主题模板层次结构以及WordPress如何选择要使用的模板<?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>

  • get_template_part
  • WP_HTTP API,对于那些真正的时间,您确实需要对API执行远程请求。功能,如wp_remote_getwp_remote_post 在这里会有帮助WP_DEBUG 在您的wp-config.php 并安装一个插件,如调试栏或查询监视器,这些都将极大地帮助您。一定要打电话wp_footer 但在模板页脚中
  • SO网友:eduardogoncalves

    假设您有此cenario:

    您的wordpress安装作为您的站点和标题托管在“www”根文件夹中。php位于“www/includes”文件夹中。

    在你的wordpress主题中,只需添加

    <?php
    include(\'includes/header.php\');
    ?>
    
    WordPress读取主题文件时,使用根路径。

    SO网友:Giorgio Tedesco

    不能在上包含外部资源include() 功能!按服务器内部路径包括作品。您不能根据需要包含url。这是一个PHP安全问题!

    您可以使用:

    get_file_contents(\'http://your.url\'); 
    
    或者使用卷曲库。

    SO网友:dev

    对于子主题:

    <?php echo get_stylesheet_directory_uri().\'/subfoldername/add.php\';?>
    
    您可以使用

    For Parent Theme: get_template_directory() or get_template_directory_uri()
    For Child Theme: get_stylesheet_directory() or get_stylesheet_directory_uri()
    

    SO网友:abdul rashid

    当我检查核心文件时,下面是我在文件中找到的代码wp/wp-includes/general-template.php 对于函数get_header()

    我发现以下几行

    $templates[] = \'header.php\';
    
    locate_template( $templates, true );
    
    所以我在我的代码中使用它(index.php) 像这样

    <?php get_header();
    
        $myphpfile[] = \'grid.php\';
        locate_template( $myphpfile, true );
    ?>
    

    SO网友:Simon Alterator

    在这样一个老问题上发帖可能形式不好,但我最近不得不做一些类似的事情,并在使用此处未显示的方法时发现了此结果。为将来的探险家记下它;)。

    我的用例是:

    安装在子目录中的Wordpress我想包含父站点的页脚/页眉元素,而不是将Wordpress用于这些元素,因为include()require() 可以使用绝对服务器路径(例如:/var/www/vhosts/foo.bar/httpdocs/includes/baz.php), 我们可以使用Wordpress\'ABSPATH 生成此项的定义:

    include( dirname( ABSPATH ) . \'/includes/header.php\' );

    这将返回/var/www/vhosts/foo.bar/httpdocs/includes/baz.php.

    即使Wordpress位于子目录中(例如:/var/www/vhosts/foo.bar/httpdocs/blog/), dirname( ABSPATH ) 为我们提供文档根目录。

    可能还有其他方法可以做到这一点,使用$_SERVER[\'DOCUMENT_ROOT\'] 例如superglobal,但我没有对此进行探讨。

    结束

    相关推荐

    在POST循环外部加载Comments.php模板

    我正在通过ajax加载帖子,并使用$post = get_post( $post_ID );是否有方法加载注释。在我输出帖子后使用php模板?我尝试使用:global $withcomments; $withcomments = true; comments_template(); 但它不在循环中,因此它不加载模板。我正在尝试获取我的评论表单和任何当前的评论来显示,只是遇到了一些困难。任何帮助都将不胜感激!