问题描述
我想为我的 WordPress 博客创建一个自定义页面,该页面将执行我的 PHP 代码,同时保留了整个网站 CSS /主题/设计的一部分。
PHP 代码将使用第三方 API(所以我需要包括其他 PHP 文件)
我该如何做到这一点?
注:我没有特定的需要与 Wordpress API 交互 – 除了包括某些其他 PHP 库我需要我没有其他的依赖关系的 PHP 代码,我想包括在一个 WP 页面。显然,任何不需要学习 WP API 的解决方案都将是最好的解决方案。
最佳解决方案
您不需要与 API 进行交互或使用插件。
首先,在您的主题文件夹 (/wp-content/themes/themename/
) 下复制 post.php
或 page.php
。
将新文件重命名为 templatename.php
(其中,模板名称是您想要调用的新模板) 。要将新模板添加到可用模板列表中,请在新文件的顶部输入以下内容:
<?php
/*
Template Name: Name of Template
*/
?>
您可以修改此文件 (使用 PHP) 包含其他文件或任何您需要的。
然后在您的 WordPress 博客中创建一个新页面,在页面编辑屏幕中,您将在右侧的 「属性」 小工具中看到一个 「模板」 下拉列表。选择您的新模板并发布页面。
您的新页面将使用 templatename.php
中定义的 PHP 代码
次佳解决方案
如果你像我一样,有时你希望能够在 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 中删除它,这似乎是一个更清洁的选项。
第三种解决方案
创建模板页面是正确的答案,只需将其添加到您在主题文件夹中创建的页面中即可
<?php
/*
Template Name: mytemplate
*/
?>
对于运行此代码,您需要从后端选择 mytemplate 作为页面的模板
请查看此链接以获取正确的详细信息 https://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/。
第四种方案
如果您想创建自己的.php 文件,并与 Wordpress 无 404 标头交互,并保持您当前的永久链接结构,则不需要该页面的模板文件,我发现这种方法在.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 函数的方法,cept,它导致 404 标题,这是奇怪的,他们会想要使用这种方法。 https://codex.wordpress.org/Integrating_WordPress_with_Your_Website
我知道很多人已经回答了这个问题,它已经有了一个可以接受的答案,但是这是一个很好的方法,在你的 wordpress 网站根目录下的一个.php 文件 (或技术上你想要在你的网站上),你可以浏览并加载无 404 标题!
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。