【发布时间】:2018-04-03 14:07:34
【问题描述】:
我的主题中有一个自定义页面,我在其中从不同的数据库表创建帖子,然后我想在 wordpress 中进行显示,就好像它是普通帖子一样。它似乎大部分时间都有效,但随机似乎在我调用 get_header() 后修改了帖子,我不明白为什么。
我已经在 apache 中设置了一个 mod 重写规则来命中一个 php 文件,在这里我得到了我需要的数据并构建了 php 对象。我使用此函数填充 wordpress 帖子对象。
function BuildSimplePost($title, $body)
{
require_once( SITEROOT . '/wp-load.php' );
@$post = new WP_Post();
@$post->ID = -1;
$post->post_parent = 0;
$post->post_title = $title;
$post->post_name = "simple-response";
$post->post_excerpt = substr($body, 0, 100);
$post->comment_status = "closed";
$post->ping_status = "closed";
$post->post_type = "page";
$post->post_content = $body;
return $post;
}
文章排序后,我会将这篇文章推送到 wordpress 查询对象中,让主题完成剩下的工作。
$posts = array($post);
$wp_query->posts = $posts;
$wp_query->post_count = count($posts);
$wp_query->found_posts = count($posts);
$wp_query->max_num_pages = 1;
$wp_query->post = $post;
$wp_query->is_404 = 0;
$wp_query->is_singular = 1;
$wp_query->is_single = 1;
$wp_query->page_id = $post->ID;
include get_template_directory()."/external-page.php";
在external-page.php 内部没有什么奇怪的。它实际上是删除了一些 html 的 single.php 的副本。我遇到的问题是,当在此文件中调用 get_header(); 时,帖子会更改为其他内容。然后这会触发重定向,将用户带到网站上属于 wordpress 的不同页面。
有人知道为什么 get_header 方法会导致这样的重定向吗?
【问题讨论】:
-
你看过wordpress生成的实际源代码吗?
-
@ArtisticPhoenix wordpress 有很多源代码。你能指定我需要看什么代码吗?
-
不是真的,但你可能会看到 2 个
<head>标签或一些非常混乱的标签,或者像meta refresh,除非你看,否则谁知道。也许你在那里看到复活节兔子?在你真正知道之前,你不会知道你认为你知道什么。 -
所以你绕过了 WP 用于处理自定义帖子类型的所有机制,转而使用你自己奇怪的法兰安装后门方法......为什么?
-
您也可以尝试
ob_start(); get_header(); $content = ob_get_clean();,它会执行该函数但在缓冲区中捕获输出,然后您将知道标头中是否有一些内容正在执行此操作或某些功能。这是一个你必须消除事物的过程。