1

我正在尝试将执行的 header.php/footer.php 文件的结果作为 html 字符串读取。这是场景:

网站中有一些页面是在 .net 环境中开发的,但它们希望在整个域中共享通用的页眉/页脚。他们希望 WordPress 成为此代码的存储库,并且只要有更新,就可以对 .net Web 服务进行 PHP cURL 调用,并为其提供页眉/页脚的新 HTML。

我尝试调用get_header()但它没有返回字符串(正如我预期的那样),所以我在 functions.php 中尝试了这个测试解决方案:

function write_header() {
$header_content = file_get_contents(get_bloginfo('wpurl').'/index.php' );
$fp = fopen('c:\header.txt', 'a+');
fwrite($fp, $header_content);//just testing the output, this will be a cURL call eventually.
fclose($fp);
}
add_action( 'wp_update_nav_menu', 'write_header' );

这似乎是获取 HTML 的一种非常笨拙的方法,因为我必须进行大量字符串操作才能解析出我想要的部分。有没有我想念的更简单的方法?

4

2 回答 2

2

如果get_header()为您输出标头,请尝试仅用 an 包装它ob_start()并将ob_get_contents()标头提取为字符串。然后,您可以使用 丢弃输出ob_end_clean()。请参阅PHP 输出缓冲文档

ob_start();
get_header();
$header_as_string = ob_get_contents();
ob_end_clean();
于 2012-10-19T12:11:41.203 回答
1

有几种方法可以解决这个问题(两者都有点麻烦,但不是......)。第一种是在主题目录中创建一个模板,该模板仅包含页眉和页脚调用——模板的主体可以包含一个分隔符字符串,如 html 注释,例如<!-- SPLIT HERE -->.

通过 CURL 将页面请求到输出缓冲区,捕获结果响应,您可以使用上述分隔符将其拆分为其组成部分。这将为您提供您的页眉和页脚,并在页眉中为 css、js 等提供完全呈现的标签。它并不漂亮,但它可以完成工作。

第二种方法是对第一种方法的改编,如果可能,请让您的 .net 团队自行处理,而不是您进行拆分。

更新

好的,实际上还有第三种选择,我完全忘记了,那就是使用 WP 的功能之一:wp_remote_get() http ://codex.wordpress.org/Function_API/wp_remote_get

使用 HTTP GET 方法检索 URL,以数组形式返回结果。结果包括 HTTP 标头和内容。

这是您应该得到的(摘自 API 文档):

Array
(
    [headers] => Array
        (
            [date] => Thu, 30 Sep 2010 15:16:36 GMT
            [server] => Apache
            [x-powered-by] => PHP/5.3.3
            [x-server] => 10.90.6.243
            [expires] => Thu, 30 Sep 2010 03:16:36 GMT
            [cache-control] => Array
                (
                    [0] => no-store, no-cache, must-revalidate
                    [1] => post-check=0, pre-check=0
                )

            [vary] => Accept-Encoding
            [content-length] => 1641
            [connection] => close
            [content-type] => application/php
        )
    [body] => <html>This is a website!</html>
    [response] => Array
        (
            [code] => 200
            [message] => OK
        )

    [cookies] => Array
        (
        )

)

您所要做的就是将 URL 传递到使用我上面提到的模板的页面,然后处理来自wp_remote_get();的响应。提取 html 内容表单[body]并进行字符串拆分。差不多就是你想要的。

进一步阅读wp_remote_retrieve_body() http ://codex.wordpress.org/Function_API/wp_remote_retrieve_body

于 2012-10-19T00:43:57.483 回答