1

実行されたheader.php/footer.phpファイルの結果をhtmlの文字列として読み取ろうとしています。シナリオは次のとおりです。

サイトには.net環境で開発されたページがありますが、ドメイン全体で共通のヘッダー/フッターを共有したいと考えています。彼らはWordPressをこのコードのリポジトリにしたいので、更新があるときはいつでも.netWebサービスへのPHPcURL呼び出しを行い、ヘッダー/フッターの新しい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()でラップして、ヘッダーを文字列に抽出してみてください。その後、。を使用して出力を破棄できます。PHP出力バッファリングのドキュメントを参照してください。ob_start()ob_get_contents()ob_end_clean()

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

この問題に取り組む方法はいくつかあります(どちらも少し厄介ですが、そうではありません...)。1つ目は、ヘッダーとフッターの呼び出しのみを含むテンプレートをテーマのディレクトリに作成することです。テンプレートの本文には、htmlコメントのような区切り文字列を含めることができます<!-- SPLIT HERE -->

CURLを介してページを出力バッファーに要求し、結果の応答をキャプチャします。これは、上記の区切り文字を使用してコンポーネント部分に分割できます。これにより、ヘッダーとフッターが作成され、css、jsなどのヘッダーに完全にレンダリングされたタグが追加されます。きれいではありませんが、機能します。

2番目のアプローチは、最初のアプローチを適応させることです。これは、分割を行うのではなく、可能であれば.netチームに処理を任せます。

アップデート

さて、実際には3番目のオプションがありますが、これは完全に忘れていました。それは、WPの機能の1つを使用することです:http:wp_remote_get() //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 に答える