如何将PHP页面添加到WordPress?

rut*_*ord 246 php wordpress

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

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

我该如何做到这一点?

NB我没有特别需要与Wordpress API交互 - 除了包括我需要的某些其他PHP库我在PHP代码中没有其他依赖项,我想要包含在WP页面中.显然,任何不需要学习WP API的解决方案都是最好的.

Ada*_*son 381

您无需与API交互或使用插件.

首先,复制post.phppage.php在您的主题文件夹(下/wp-content/themes/themename/).

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

<?php
/*
Template Name: Name of Template
*/
?>
Run Code Online (Sandbox Code Playgroud)

您可以修改此文件(使用PHP)以包含其他文件或任何您需要的文件.

然后在WordPress博客中创建一个新页面,在页面编辑屏幕中,您将在右侧的" 属性"窗口小部件中看到" 模板"下拉列表.选择新模板并发布页面.

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

资料来源:https://developer.wordpress.org/themes/template-files-section/page-template-files/#creating-custom-page-templates-for-global-use

  • 在我创建包含注释的文件之前,模板选项不可用.然后出现模板选项.很好 - 我打算使用短代码,但这更容易. (18认同)
  • @adam的道具 - 这是最简单,最简单,最快捷的方式. (12认同)
  • @DamianGreen这个问题并不要求采用完全自动化的方式,实际上表明了避免使用WP API的偏好 (3认同)
  • 一个页面就是一个页​​面,当浏览器查看它时它是一个 http 请求 - 所以是的。 (2认同)
  • 这个答案感觉不对,因为它没有重用现有的主题元素,而是将它们复制粘贴(第2段)。如果主题是由第三方提供的,则它可能会收到主题更新,这些更新不会级联到自定义模板。此外,它还增加了更改网站外观的复杂性,更改主题需要重新构建自定义页面。出于这两个原因,插件会更好吗?按照我阅读问题的方式,OP希望添加其他功能,而不是添加其他主题元素*“使用第三方API” * (2认同)

Sol*_*son 26

如果你想创建自己的.php文件并与没有404 Headers的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();
?>
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以简单地执行任何wordpress功能.此外,这假设您的.php文件wp-config.php位于您的文件所在的wordpress站点的根目录中.

对我来说,这是一个无限的发现,因为我使用require_once(dirname(__FILE__) . '/wp-blog-header.php');的时间最长,因为Wordpress甚至告诉你这是你应该用来集成Wordpress函数的方法,但是,它会导致404标题,这是他们想要的奇怪你使用这种方法. https://codex.wordpress.org/Integrating_WordPress_with_Your_Website

我知道很多人已经回答了这个问题并且它已经有了一个可接受的答案,但是对于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();
?>
Run Code Online (Sandbox Code Playgroud)

只是为了更新所有这一点,这种方法需要的代码少一些,但是由你决定使用哪一个.

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

Dre*_*ewT 13

如果您像我一样,有时您希望能够在CMS中不存在的页面中引用WordPress功能.这样,它保持后端特定,不会被客户端意外删除.

这通过wp-blog-header.php使用php 包含文件实际上很简单require().

这是一个使用查询字符串为任何帖子生成Facebook OG数据的示例.

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

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

<?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>
Run Code Online (Sandbox Code Playgroud)

你有它:使用帖子的实际图像,摘录和标题为任何帖子生成共享模型!

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


2017年编辑: 请注意,此方法现已弃用

对于2016年以上的WP安装,请参阅/sf/answers/2786037411/,了解在将页面数据输出到浏览器之前要包含的额外参数.


小智 8

创建模板页面是正确的答案,因为这只是将其添加到您在主题文件夹中创建的页面中

<?php
    /*
    Template Name: mytemplate
    */
?>
Run Code Online (Sandbox Code Playgroud)

要运行此代码,您需要从后端选择mytemplate作为页面的模板

请参阅此链接以获取正确的详细信息 https://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/.


I a*_*son 5

如果您需要在 WordPress 主题之外添加 PHP 页面,则任何答案均未涵盖。这就是方法。

您需要包含 wp-load.php。

<?php require_once('wp-load.php'); ?>
Run Code Online (Sandbox Code Playgroud)

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