如何将PHP页面添加到WordPress?


263

我想为我的WordPress博客创建一个自定义页面,该页面将在其中执行我的PHP代码,同时保留整个网站CSS /主题/设计的一部分。

PHP代码将使用第三方API(因此我需要包含其他PHP文件)。

我该怎么做?

注意:我没有与WordPress API交互的特殊需求-除了包括某些其他PHP库之外,我还需要在WordPress页面中包含的PHP代码中没有其他依赖项。因此,显然任何不需要学习WordPress API的解决方案都是最好的。


Answers:


400

您无需与API进行交互或使用插件。

首先,重复post.phppage.php在主题文件夹中(/wp-content/themes/themename/)。

将新文件重命名为templatename.php(其中templatename是您要称为新模板的名称)。要将新模板添加到可用模板列表中,请在新文件顶部输入以下内容:

<?php
/*
Template Name: Name of Template
*/
?>

您可以修改该文件(使用PHP)以包括其他文件或所需的任何文件。

然后在WordPress博客中创建一个新页面,在页面编辑屏幕中,您会在右侧的Attributes小部件中看到一个Template下拉列表。选择新模板并发布页面。

您的新页面将使用在中定义的PHP代码 templatename.php

来源:创建供全球使用的自定义页面模板


20
在创建带有注释的文件之前,模板选项不可用。然后出现模板选项。很好-我打算使用简码,但这更容易。
Dave Hilditch 2013年

1
使用插件发布php有什么缺点吗?
Suhail Gupta 2014年

1
页面是一个页面,当浏览器查看它是一个http请求时-是的。
亚当·霍普金森

3
@DamianGreen这个问题并不要求采用完全自动化的方法,并且实际上表明了避免使用WP API的偏好
Adam Hopkinson

3
这个答案感觉不对,因为它没有重用现有的主题元素,而是将它们复制粘贴(第2段)。如果主题是由第三方提供的,则它可能会收到主题更新,这些更新不会级联到自定义模板。此外,它还增加了更改网站外观的复杂性,更改主题需要重新构建自定义页面。出于这两个原因,插件会更好吗?在我阅读问题的方式中,OP希望添加其他功能,而不是添加其他主题元素“使用第三方API”
Philip Couling

29

如果您要创建自己的.php文件并与不带404标头的WordPress进行交互并保持当前的永久链接结构,则无需为该页面使用模板文件。

我发现这种方法在您的.php文件中效果最好:

<?php
    require_once(dirname(__FILE__) . '/wp-config.php');
    $wp->init();
    $wp->parse_request();
    $wp->query_posts();
    $wp->register_globals();
    $wp->send_headers();

    // Your WordPress functions here...
    echo site_url();
?>

然后,您可以在此之后简单地执行任何WordPress功能。此外,这还假定您的.php文件wp-config.php位于文件所在的WordPress网站的根目录内。

对我来说,这是一个无价的发现,因为我使用require_once(dirname(__FILE__) . '/wp-blog-header.php');了最长的时间,因为WordPress甚至告诉您这是集成WordPress函数的方法,除了它会导致404标头,这很奇怪,他们想要您使用这种方法。将WordPress与您的网站集成

我知道很多人已经回答了这个问题,并且已经有了一个可以接受的答案,但是对于在WordPress网站根目录(或技术上您想要在网站中的任何位置)中的.php文件,这是一种不错的方法,您可以浏览并加载没有404标头!


更新:有一种wp-blog-header.php不使用404标头的方法,但这需要您手动添加标头。这样的事情将在您的WordPress安装的根目录中起作用:

<?php
    require_once(dirname(__FILE__) . '/wp-blog-header.php');
    header("HTTP/1.1 200 OK");
    header("Status: 200 All rosy");

    // Your WordPress functions here...
    echo site_url();
?>

只是为了向您更新所有内容,此方法所需的代码要少一些,但这取决于您使用哪个代码。


1
但是会出现404标头,即使使用此页面顶部的激活新的多站点时,甚至Wordpress多站点文件wp-activate.php都必须通过设置来禁用404标头。$wp_query->is_404 = falserequire( dirname( __FILE__ ) . '/wp-blog-header.php' );
所罗门·克洛森

2
我不明白您如何无法重现问题。重新创建非常简单。只需安装Wordpress,然后创建.php文件,然后使用codex.wordpress.org/Integrating_WordPress_with_Your_Website上wp-blog-header.php定义的方法,即可在浏览器检查器工具中看到404标头。
所罗门·克洛森

1
如果您在对此问题进行深入研究时错过了它,那么这里的网页也记录了该问题: cooltrainer.org/…
所罗门Closson

1
标头问题是最新版本的WordPress中发生的一个问题,这正是我在最初的评论中建议的。小心使用“永不失败”之类的词。:)
DrewT

1
这是解决问题的非常不正确的方法。通过这种方法,您将创建一个仅在WP不更改其引导程序的情况下才有效的解决方案。您应该利用可用的钩子来(轻松地)完成此操作。
劳伦斯·约翰逊

13

如果您像我一样,有时您希望能够在CMS中不存在的页面中引用WordPress函数。这样,它仍然是特定于后端的,并且不会被客户端意外删除。

实际上,仅通过wp-blog-header.php使用PHP 包含文件即可完成此操作require()

这是一个使用查询字符串为任何帖子生成Facebook 开放图(OG)数据的示例。

以链接为例,例如我们要为其生成OG数据的帖子的ID http://example.com/yourfilename.php?1在哪里1

现在yourfilename.php,为了方便起见,其内容位于WordPress根目录中:

<?php
    require( dirname( __FILE__ ) . '/wp-blog-header.php' );

    $uri = $_SERVER['REQUEST_URI'];
    $pieces = explode("?", $uri);
    $post_id = intval( $pieces[1] );

    // og:title
    $title = get_the_title($post_id);

    // og:description
    $post = get_post($post_id);
    $descr = $post->post_excerpt;

    // og:image
    $img_data_array = get_attached_media('image', $post_id);
    $img_src = null;
    $img_count = 0;

    foreach ( $img_data_array as $img_data ) {
        if ( $img_count > 0 ) {
            break;
        } else {
            ++$img_count;
            $img_src = $img_data->guid;
        }
    } // end og:image

?>
<!DOCTYPE HTML>
<html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=yes" />
<meta property="og:title" content="<?php echo $title; ?>" />
<meta property="og:description" content="<?php echo $descr; ?>" />
<meta property="og:locale" content="en_US" />
<meta property="og:type" content="website" />
<meta property="og:url" content="<?php echo site_url().'/your_redirect_path'.$post_id; ?>" />
<meta property="og:image" content="<?php echo $img_src; ?>" />
<meta property="og:site_name" content="Your Title" />
</html>

在那里,您可以:使用帖子的实际图像,摘录和标题为任何帖子生成共享模型!

我们可以创建一个特殊的模板并编辑永久链接结构来执行此操作,但是由于只需要一个页面,并且因为我们不希望客户端从CMS中删除它,因此这似乎是更干净的选择。


EDIT 2017: 请注意,此方法现已弃用

对于2016年以后的WordPress安装,请参阅如何向WordPress添加PHP页面?在将页面数据输出到浏览器之前要包含的其他参数。



5

如果您需要在WordPress主题之外添加PHP页面,则没有任何答案。就是这样

您需要包括wp-load.php。

<?php require_once('wp-load.php'); ?>

然后,您可以在该页面上使用任何WordPress功能。


这个想法对我非常有用。但是看看这篇文章关于使用require_once('wp-load.php');正确
optimiertes

1

创建一个名为my-page.php的页面,并将其保存在主题目录下。现在,编辑此php文件,并将以下行写在页面顶部

<?php /* Template Name: My Page */ ?>

在自定义页面定义行下编写PHP代码,您可以调用该文件中的其他WP模板,函数。

开始像 <?php require_once("header.php");?>

以任何方式集成页眉和页脚以保持布局一致。

由于这是我的页面,因此您需要从WordPress管理面板创建页面。转到管理员=>页面=>添加新

根据您对自定义页面的编码方式,添加页面标题,也可以添加页面正文(描述)。如果描述是在自定义php页面中编写的,则可以完全跳过该描述。

在右侧,选择模板。从下拉菜单中选择我的自定义页面。你们都准备好了!转到[wordpress] [1]创建的子弹(永久链接),然后查看页面。


1

将WordPress Page Template中的PHP页面添加到child-theme文件夹中的最佳方法。

如何Page Template在WordPress中创建。

创建一个名为的文件template-custom.php并将其放入/wp-content/theme/my-theme/

<?php
 /*
 * Template Name: Custom Template
 * Custom template used for custom php code display
 * @package   Portafolio WordPress Theme
 * @author    Gufran Hasan
 * @copyright Copyright templatecustom.com
 * @link      http://www.templatecustom.com
 */
?>
<?php get_header(); ?>
<?php
  //write code here

 ?>

<?php get_footer(); ?>

更多细节


1

您将要看看WordPress的插件API。

这说明了如何“挂钩”和“过滤”到WordPress机制的不同部分,因此您可以在任意给定时间的几乎任何地方执行自定义PHP代码。挂钩,过滤和自定义代码创作都可以在任何主题下的functions.php文件中进行。快乐的编码:)


不过,我真的不想与Wordpress API本身进行交互-我的PHP代码完全独立于任何WP恶作剧。但是我确实需要引用外部php文件。您确定在这种情况下需要学习API吗?
卢瑟福

这完全取决于您要执行的操作。在某些情况下,使用API​​可能会有所帮助,而在其他情况下则完全不需要。这完全取决于您要实现的目标。您可以使用@adam的建议并使用页面模板,也可以将所有自定义代码保存在一个篮子中,然后将其挂钩/过滤到WordPress的不同部分。我会说所有的,选择最适合您的方法以及您感到满意的方法。所有这三个答案将以一种或另一种形式满足您的要求。
hsatterwhite 2010年

1

如果您不想使用WordPress API,那么Adam的答案确实是最好的答案。

如果您愿意使用API​​,建议您挂入“模板重定向”钩子,该钩子可让您将特定的URL或页面指向任意PHP文件,同时仍可访问WordPress。


1

亚当·霍普金森广泛接受的答案)不是完全自动的页面创建方法!它要求用户在WordPress的后端(在wp-admin破折号中)手动创建一个页面。问题在于,一个好的插件应该具有完全自动化的设置。它不应要求客户端手动创建页面。

另外,这里的其他一些广泛接受的答案涉及在WordPress之外创建静态页面,然后仅包含一些WordPress功能以实现主题页眉和页脚。尽管该方法在某些情况下可能有效,但如果不包含其所有功能,则可能会使与WordPress集成这些页面非常困难。

我认为最好的,完全自动化的方法是使用创建一个页面wp_insert_post并将其驻留在数据库中。有关此内容的示例和精彩讨论以及如何防止用户意外删除页面,可以在此处找到:wordpress-automatically-creating-page

坦白说,我很惊讶尚未将这种方法作为对此受欢迎问题的解答(已发布7年)。


1
在我写完上述答案后,我立即意识到用户的意图是能够将PHP包含在页面内容中,这种方法显然不允许这样做。PHP仅可用于生成内容,而不能包含在内容中,因此页面将被静态保存,而不是动态保存。但是,您可以通过在每次调用时重新创建页面及其内容(通过提供页面ID)来使页面具有动态外观。您的插件可以处理这种情况的发生时间和方式,也许可以通过监视$ _SERVER [“ REQUEST_URI”]
Damian Green

2
在您的答案中,您谈到要防止用户意外删除。你是怎样做的?
GJ


0

除了创建自定义模板文件并将该模板分配给页面(如已接受的答案中的示例)外,还有一种使用WordPress加载模板(模板层次结构)的模板命名约定的方法。

创建一个新页面,并使用该页面的清单作为模板文件名(创建名为page- {slug} .php的模板文件)。WordPress将自动加载符合该规则的模板。


0

只需page-mytitle.php在当前主题的文件夹中创建一个文件,然后在控制面板中创建一个页面“ mytitle”

然后,当您通过URL调用页面时,您将看到page-mytitle.php。您必须将HTML,CSS,JavaScript,wp-loop等添加到此PHP文件(page-mytitle.php)。


0

您可以在活动主题文件夹下添加任何php文件,例如 (/ wp-content / themes / your_active_theme /),然后从wp-admin添加新页面,然后从页面模板选项中选择此页面模板。

<?php
/*
 Template Name: Your Template Name
 */
?>

还有另一种方法,例如可以将文件包含在functions.php中并从中创建简码,然后将其放入页面中。

// CODE in functions.php 

function abc(){
 include_once('your_file_name.php');
}
add_shortcode('abc' , 'abc');

然后,您可以像[abc]这样在wp-admin侧页中使用此短代码 。


-2
<?php /* Template Name: CustomPageT1 */ ?>

<?php get_header(); ?>

<div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">
        <?php
        // Start the loop.
        while ( have_posts() ) : the_post();

            // Include the page content template.
            get_template_part( 'template-parts/content', 'page' );

            // If comments are open or we have at least one comment, load up the comment template.
            if ( comments_open() || get_comments_number() ) {
                comments_template();
            }

            // End of the loop.
        endwhile;
        ?>

    </main><!-- .site-main -->

    <?php get_sidebar( 'content-bottom' ); ?>

</div><!-- .content-area -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

-2

您可以将文件命名为“ newpage.php”-将其放在主题目录中wp-content。您可以将其设为页面模板(请参见http://codex.wordpress.org/Pages.。),也可以将其包含在主题中的一个PHP文件中,例如header.php或single.php。

更好的是,创建一个子主题并将其放在其中,这样您就不用理会主题代码,并且更容易更新。

http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates


链接是半断开的:它重定向两次,并且没有名为“创建自己的页面模板”的子部分。最接近或可能不是页面模板 ” 子节。也有单独的页面(名称相同)页面模板
Peter Mortensen

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.