读取WordPress Header.php/footer.php到文本字符串



我正在尝试将执行的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,因为我必须进行大量的绳子操作来解析我想要的碎片。我缺少一种更简单的方法吗?

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

ob_start();
get_header();
$header_as_string = ob_get_contents();
ob_end_clean();

有几种方法可以解决此问题(两者都有一些kludge,但不是...)。第一个是在主题目录中创建模板,仅包括标题和页脚调用 - 模板的主体可以包含一个定界器字符串,例如HTML注释,例如<!-- SPLIT HERE -->

通过卷曲请求页面进入输出缓冲区,从而捕获结果响应,您可以使用上述定界符将其分为组件部分。这将为您提供标题和页脚,并配有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()的响应;提取[body]的HTML内容形式并进行串分开。您想要的几乎。

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

最新更新