0

投稿コンテンツを投稿メタに保存しています。元の投稿コンテンツの代わりにそれを取得して、the_content()を呼び出すと、投稿メタのデータが実際の投稿データではないように表示したいと思います。

function test(){
    $post_meta = post meta data here ....
    echo apply_filters('the_content', '$post_meta');
}
add_filter('the_content', 'test');

このエラーが発生します

Fatal error: Maximum function nesting level of '100' reached

エラーは理にかなっていますが、私がやろうとしていること、何かアイデアをどのように達成できますか?

4

2 に答える 2

4

更新:壁に頭をぶつけた後、無限ループに陥ることなく、カスタムコールバック内からthe_contentにフックして、そのフィルターを使用することを考えることができる最善の方法があります。

答えは驚くほど単純で、以前は考えていなかったのでばかげています。

function test($content)
{
    remove_action('the_content', 'test'); //DISABLE THE CUSTOM ACTION
    $post_meta = post meta data here ....
    $cleaned_meta = apply_filters('the_content', $post_meta);
    add_action('the_content', 'test'); //REENABLE FROM WITHIN
    return $cleaned_meta;
}
add_action('the_content', 'test');

これまでに別の解決策を見つけたと思いますが、それでも、これが将来発生する可能性のある問題に役立つことを願っています。

于 2012-05-09T21:46:17.913 に答える
0

the_content()と呼ばれる前にフィルターを追加したいと思います。あなたはおそらくこのようなものが欲しいでしょう。

function modify_content() {
    global $post;
    $post_meta = 'testing';
    $post->post_content = $post_meta;
}
add_action('wp_head', 'modify_content');

これにより、投稿の内容を変更しても、のフィルターを実行できますthe_content()。ただし、これは単一の投稿/ページに対してのみ機能します。アーカイブページも変更したい場合は、別のフックを見つける必要があります。

于 2012-05-09T21:24:50.847 に答える