如何添加一个PHP页面到WordPress?

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

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

我该如何做到这一点?

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


您不需要与API交互或使用插件。

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

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

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

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

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

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


如果你想创建你自己的.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站点的根目录中。

对我而言,这是一个PRICELESS发现,因为我使用的是require_once(dirname(__FILE__) . '/wp-blog-header.php'); 在Wordpress甚至告诉你这是你应该用来集成Wordpress函数的方法时,最长的时间会导致404头,这很奇怪,他们会希望你使用这种方法。 https://codex.wordpress.org/Integrating_WordPress_with_Your_Website

我知道很多人已经回答了这个问题,它已经有了一个可以接受的答案,但是这里有一个很好的方法可以用于WordPress的网站根目录(或者技术上你想要的任何地方)的.php文件,你可以浏览到并加载没有404头!

编辑

这里只是一个快速更新。 有一种方法可以在不使用404头的情况下使用wp-blog-header.php ,但这需要您手动添加头文件,像这样的东西可以在您的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();
?>

只是为了更新你所有的这一点,这个方法需要的代码少一点,但这取决于你使用哪一个。


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

这实际上很简单,只需通过使用php require()来包含wp-blog-header.php文件即可。

以下是使用查询字符串为任何帖子生成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>

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

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


编辑2017年: 请注意,这种方法现在已被弃用

对于2016+以上的WP安装,请参阅https://stackoverflow.com/a/39800534/1958998,以获取在将页面数据输出到浏览器之前包含的额外参数。

链接地址: http://www.djcxy.com/p/69349.html

上一篇: How to add a PHP page to WordPress?

下一篇: Facing issue in mail function