我试图将执行的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的方法,因为我将不得不做大量的字符串操作来解析我想要的部分。是否有一种更简单的方法可以解决这个问题?
答案 0 :(得分:1)
有几种方法可以解决这个问题(两者都有点像kludge,但不是......)。第一种方法是在主题目录中创建一个仅包含页眉和页脚调用的模板 - 模板的主体可以包含一个分隔符字符串,如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
(
)
)
您所要做的就是将网址传递给使用我上面提到的模板的网页,然后处理来自wp_remote_get()
的回复;提取html内容表单[body]
并进行字符串拆分。几乎是你想要的。
进一步阅读:wp_remote_retrieve_body()
http://codex.wordpress.org/Function_API/wp_remote_retrieve_body
答案 1 :(得分:1)
如果get_header()
为您输出标题,请尝试使用ob_start()
和ob_get_contents()
将其包装以将标头提取为字符串。然后,您可以使用ob_end_clean()
丢弃输出。请参阅PHP output buffering documentation。
ob_start();
get_header();
$header_as_string = ob_get_contents();
ob_end_clean();