2010-07-02 107 views
2

我在實際的教程中詢問了這個問題,但不確定我會在接近2個月的時間內很快得到答案...所以我會在這裏採取一個更好的...WordPress的:apply_filters&add_action到the_content = EVIL?

教程在這裏:Build a WordPress Plugin to Add Author Biographies to your Posts

綜上所述教程什麼問題是,該教程增加了一個作者簡介上像這樣內容的一端(短版):

function x($content) { 
    return $content . "Author Bio"; 
} 

add_action('the_content','x'); 

問題:

當有人使用:

$z = apply_filters('the_content', 'some content here'); 
echo $z; 

的作者簡介最終將應用到$ z和如果$ Z在一些頁面的中間呼應了......在作者簡介將在一些頁面的中間...正確? (這是正確的,因爲我已經測試過...)

有沒有更好的方法來將某些東西應用於end/under/below the_content掛鉤?除了add_action(‘the_content’, ‘some_function’),因爲這對我來說似乎是邪惡的...

或者是apply_filters(‘the_content’, ‘some content here’)不是規範或開發人員不應該在他們的WordPress模板中使用的內容......? (這似乎非常規範,至少在谷歌格式化循環之外的「the_content」)...

回答

3

使用apply_filters('the_content','some content here'),雖然它可能不是'規範'(我不知道。之前沒有看到過,但如果我需要格式化的文本,那就是我所要做的),是一種完全有效的過濾器使用方式,可以像內容一樣獲得一些格式化的文本。不幸的是,沒有更好的方法來從插件追加內容。這就是這些工作的方式。

但是,有一個(不太理想的)繞過這個方法。作爲插件安裝/安裝過程的一部分,讓用戶在其主題中插入自定義函數調用,操作或過濾器。我知道有幾個插件可以做到這一點,所以並不罕見。事情是這樣的:

do_action('my_super_awesome_bio_hook');

將允許你勾不必擔心增加生物意外(和非預期的)內容。更妙的是插入一個過濾器:

echo apply_filters('my_super_awesome_bio_filter_hook','');

這將使你的插件修改的生物,而且使用插件如有必要,重寫它允許一個(如網頁上,他們只是使用摘錄,如搜索結果等)。

希望這有助於。

此外,一個小附錄:您應該使用add_filter,而不是add_action追加作者生物。 add_action仍然有效,但它是您想要使用的過濾器。

+0

感謝John的回覆和添加的提示... 我可以假設在爲Wordpress開發主題/插件時,「apply_filters('the_content','這裏的一些內容')」不是常用的做法嗎? 似乎任何人這樣做會打開一罐蠕蟲的任何其他插件/主題元素,將添加一個動作/過濾器「the_content」... 如果apply_filters有一個選項只應用默認過濾器的任何鉤... – luckykind 2010-07-02 15:00:32

+2

是的,這不是一個常見的做法,你說的原因。你並不總是知道'the_content'最終會調用什麼。簡單的Facebook連接就是一個很好的例子。它有時會爲內容添加一個「Like」按鈕。如果您希望能夠在不觸發動作的情況下將the_content的過濾器應用於文本,您可以通過wp-includes/default-filters.php查看它所經過的函數,然後調用函數而不是使用過濾器。 – 2010-07-02 16:06:28

+0

再次感謝約翰在這方面的幫助...... – luckykind 2010-07-08 17:08:54

0

我碰到了一個類似的問題,我正在開發一個小部件。我剛剛發現這一點:

http://codex.wordpress.org/Function_Reference/wpautop

哪,我現在將要使用的,而不是add_filters( 'the_content')。我想要所見即所得的格式,但我不希望東西附加到我的內容,因爲它不是傳統的內容了。

相關問題