web-dev-qa-db-ja.com

ページコンテンツ全体を取得する(ブラウザで生成されたHTML)

私はWordPressで生成された全ページを提供するフィルタを探しています - メタタグ、ボディ、スタイリングそして動的コンテンツを含むヘッドセクションを含みます。 the_content()とthe_excerpt()は動的部分に対してのみ機能し、リクエストフィルタはSQLクエリに対してのみ機能するように見えます(しない)。

すべてのリンクまたはボタンでページ全体の一部のデータをフィルタリングしたいと思います。これどうやってするの?

5
Mario Peshev

これを実現するには、 出力バッファリング を使用できます。

テンプレートがレンダリングされる直前に優先度の高いフックを追加します。

add_action('template_redirect', 'foo_buffer_go', 0);
function foo_buffer_go(){
    ob_start('foo_buffer_callback');
}

非常に低い優先順位でシャットダウンフックを追加してください。

add_action('shutdown', 'foo_buffer_stop', 1000);
function foo_buffer_stop(){
    ob_end_flush();
}

コールバック内で、レンダリングされたHTMLを操作します。

function foo_buffer_callback($buffer){
  //Do something with the buffer (HTML)
  return $buffer;
}

あなたはここにプラグインとしてこれをダウンロードすることができます: http://3-3.me/B9lK

  1. プラグインを有効にする
  2. サイトにアクセスすると、生成されたHTML全体をキャプチャしていることを意味する「Foo Bar」としてレンダリングされます。
7
Brian Fegter

@ BrianFegterのコードを少し変更して、出力バッファが開かれた場合にのみ閉じられるようにします。これには、フィルタリングするかどうかを条件付きで決定できるという利点があります。

if ($want_to_modify_content) {
    add_action('template_redirect', 'YOURPLUGIN_buffer_start', 0);
}
function YOURPLUGIN_buffer_start() {
    add_action('shutdown', 'YOURPLUGIN_buffer_stop', PHP_INT_MAX);
    ob_start('YOURPLUGIN_modify_content'); 
}
function YOURPLUGIN_buffer_stop() {
    ob_end_flush();
}
function YOURPLUGIN_modify_content($content) {
    //modify $content
    return $content;
}
1
Walf

HTTP API /を使用して、 投稿URL の内容を取得できます。

1
Anh Tran