如何添加一个PHP页面到WordPress?
我想为我的WordPress博客创建一个自定义页面,它将执行我的PHP代码,同时保留整个网站CSS /主题/设计的一部分。
PHP代码将使用第三方API(所以我需要包含其他PHP文件)
我该如何做到这一点?
NB我没有特别需要与Wordpress API进行交互 - 除了包含某些其他PHP库,我需要在我想包含在WP页面中的PHP代码中没有其他依赖项。 所以显然任何不需要学习WP API的解决方案都是最好的解决方案。
您不需要与API交互或使用插件。
首先,在您的主题文件夹中(在/wp-content/themes/themename/
)重复post.php
或page.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