问答中心分类: WORDPRESS如何将 PHP 页面添加到 WordPress?
0
匿名用户 提问 1月 前

我想为我的 WordPress 博客创建一个自定义页面,该页面将在其中执行我的 PHP 代码,同时保留整个网站 CSS/主题/设计的一部分。
PHP 代码将使用第三方 API(因此我需要包含其他 PHP 文件)。
我该如何做到这一点?
注意:我没有与 WordPress API 交互的特定需求——除了包含某些其他 PHP 库之外,我需要在我想要包含在 WordPress 页面中的 PHP 代码中没有其他依赖项。因此,显然任何不需要学习 WordPress API 的解决方案都是最好的解决方案。

Michaël 回复 1月 前

你可以使用这些插件:wordpress.org/extend/plugins/exec-php或者wordpress.org/extend/plugins/php-code-widget希望它会有所帮助!

16 Answers
0
Solomon Closson 回答 1月 前

如果您想创建自己的 .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 文件位于您的 WordPress 站点的根目录中,wp-config.php文件位于。
这对我来说是一个无价我正在使用的发现require_once(dirname(__FILE__) . '/wp-blog-header.php');最长的时间,因为 WordPress 甚至告诉您这是您应该用来集成 WordPress 功能的方法,除了它会导致 404 标头,这很奇怪,他们希望您使用这种方法。将 WordPress 与您的网站集成
我知道很多人已经回答了这个问题,并且它已经有了一个公认的答案,但是这是一个很好的方法,用于在 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();
?>

只是为了让大家了解这一点,这种方法需要的代码少一点,但这取决于你使用哪一个。

DrewT 回复 1月 前

嗯,这是一个有趣的问题。我从未使用过任何 404 标头require( dirname( __FILE__ ) . '/wp-blog-header.php' );我想说这可能与您托管 WP 的服务器配置有关。或者,这可能是 WP 的某些发行版本中引入的错误。

Solomon Closson 回复 1月 前

然而出现 404 标题,甚至 WordPress 多站点文件wp-activate.php必须通过设置禁用 404 标头$wp_query->is_404 = false使用激活新的多站点时require( dirname( __FILE__ ) . '/wp-blog-header.php' );在此页面的顶部。

Solomon Closson 回复 1月 前

我不明白你怎么不能重现这个问题。重新创建非常简单。只需安装 WordPress,而不是创建一个 .php 文件,使用wp-blog-header.php定义的方法codex.wordpress.org/Integrating_WordPress_with_Your_Website而不是在浏览器检查器工具中查看 404 标头。

Solomon Closson 回复 1月 前

404 直接在页面本身上,没有 wp_query。比,即使您定义了某种类型的 wp_query,该页面仍被呈现为 404 页面:imgur.com/a/MuW4u

Solomon Closson 回复 1月 前

这是一个记录此问题的网页,以防您在深入研究此问题时错过了它:cooltrainer.org/…

Solomon Closson 回复 1月 前

如果您需要构建使用需要验证和检查标头的 API 的 php 文件,那么无论您是否处于多站点环境中,这种方法每次都最有效。或者你的主题是如何构成的,或者其他任何东西。这种方法永远不会失败。

DrewT 回复 1月 前

标题问题是在最新版本的 WordPress 中发生的问题,这正是我在最初评论中所建议的。小心使用“永不失败”之类的词。 🙂

Lawrence Johnson 回复 1月 前

这是一个非常不恰当的解决问题的方法。通过这条路线,您正在创建一个仅在 WP 不更改其引导程序时才有效的解决方案。您应该利用可用的钩子来(轻松地)完成它正在尝试做的事情。

bansal 回复 1月 前

那么如何从 wordpress 调用此页面?

Solomon Closson 回复 1月 前

您使用 .php 扩展名保存页面,而不是浏览到具有相对于站点 url 提供的 .php 扩展名的页面。不确定这是否回答了您的问题,但这就是您在浏览器中加载页面的方式。 php 页面不会在 wordpress 后端,它是硬编码的。这就是OP问题的目的。按照我的理解,使用 WordPress 核心功能添加 PHP 页面。如果你想使用一个 php 页面并在 wordpress 后端与之交互,那么你需要一个页面模板来代替。

0
DrewT 回答 1月 前

如果您像我一样,有时您希望能够在 CMS 中不存在的页面中引用 WordPress 功能。这样,它仍然是特定于后端的,并且不会被客户端意外删除。
这实际上很简单,只需包含wp-blog-header.php使用 PHP 的文件require().
这是一个使用查询字符串生成 Facebook 的示例打开图表(AND) 任何帖子的数据。
以链接为例http://example.com/yourfilename.php?1在哪里1是我们要为其生成 OG 数据的帖子的 ID:
现在在内容yourfilename.php为方便起见,它位于 WordPress 根目录中:

<?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 年以上的 WordPress 安装,请参阅如何将 PHP 页面添加到 WordPress?在将页面数据输出到浏览器之前要包含的额外参数。

0
user5742826user5742826 回答 1月 前

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

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

要运行此代码,您需要选择“我的模板”作为后端页面的模板。
请查看此链接以获取正确的详细信息https://developer.wordpress.org/themes/template-files-section/page-template-files/.

0
I am the Most Stupid Person 回答 1月 前

如果您需要在 WordPress 主题之外添加 PHP 页面,任何答案都没有涵盖。这就是方法。
您需要包含 wp-load.php。

<?php require_once('wp-load.php'); ?>

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

optimiertes 回复 1月 前

这个想法对我非常有用。不过退房这个帖子关于使用require_once('wp-load.php');正确地

0
Ajay Katariya 回答 1月 前

您可以在活动主题文件夹下添加任何 php 文件,例如(/wp-content/themes/your_active_theme/)然后您可以从 wp-admin 添加新页面并从页面模板选项中选择此页面模板。

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

还有另一种方法,例如您可以将文件包含在 functions.php 中并从中创建短代码,然后您可以像这样将该短代码放在您的页面中。

// CODE in functions.php 

function abc(){
 include_once('your_file_name.php');
}
add_shortcode('abc' , 'abc');

然后你可以像这样在 wp-admin 侧页中使用这个简码[ABC].