问题描述

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

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

我该如何做到这一点?

注:我没有特定的需要与 Wordpress API 交互 – 除了包括某些其他 PHP 库我需要我没有其他的依赖关系的 PHP 代码,我想包括在一个 WP 页面。显然,任何不需要学习 WP API 的解决方案都将是最好的解决方案。

最佳解决方案

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

首先,在您的主题文件夹 (/wp-content/themes/themename/) 下复制 post.phppage.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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。