2012-05-09 38 views
0

我将帖子内容保存到帖子元,我想检索它而不是原来的帖子内容,以便当我调用the_content()时后meta中的数据不会显示实际的发布数据。在wordpress中挂钩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 

误差有一定道理,但我怎么能做到什么,我试图做的,任何想法?

+0

将'echo'更改为'return'。然后会发生什么? – maiorano84

+0

什么都没有,还是一样的错误。 –

+0

然后更改'echo apply_filters('the_content','$ post_meta');' '返回$ post_meta;'。 – maiorano84

回答

3

UPDATE:多敲我的头撞在墙上之后,这里是我能想到的挂接到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'); 

我相信你已经找到了另一种解决方案到现在,不过,我希望这有助于与任何将来可能遇到的问题。

+0

当我使用get_the_content()它返回的原始内容不是后meta:D –

+0

我这将使用自定义函数并应用the_content()过滤器,而不是使用内容 –

+0

有趣。对不起,我帮不了你。让我知道这是如何结果。 – maiorano84

0

我想你想在the_content()甚至被调用之前添加你的过滤器。你可能想要这样的东西。

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

这将允许你修改后的内容,并仍然通过过滤器上the_content()运行它。虽然这只适用于单个帖子/页面。如果您想更改存档页面,则必须找到另一个挂钩。

+0

阅读以上评论。 – maiorano84

+0

我想我错过了。答案已更新。 – Rob