2012-05-09 71 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