我正在使用一個翻譯插件,它爲the_title,the_content和其他東西創建鉤子。 除了一點不顯示標題的代碼之外,所有工作都正常。 它使用此代碼:使用apply_filters跳過Wordpress函數?
$page_title = apply_filters('the_title',get_the_title());
如果我嘗試使用get_the_title()或the_title(),它打破。
應用過濾器做了什麼,以及如何讓它不會從翻譯插件跳過鉤子?
我正在使用一個翻譯插件,它爲the_title,the_content和其他東西創建鉤子。 除了一點不顯示標題的代碼之外,所有工作都正常。 它使用此代碼:使用apply_filters跳過Wordpress函數?
$page_title = apply_filters('the_title',get_the_title());
如果我嘗試使用get_the_title()或the_title(),它打破。
應用過濾器做了什麼,以及如何讓它不會從翻譯插件跳過鉤子?
the_title
和the_content
也存在於Wordpress核心中。它們被用於很多事情。如果你知道什麼是鉤子,爲什麼這樣的線是有用的。
過濾鉤和動作鉤基本上是洗衣清單。你可以把函數放在一個鉤子上,一個接一個地形成一個隊列,當這個鉤子被調用時(分別爲do_action
和apply_filters
),Wordpress會將一個函數依次排列。就像它那樣,它會執行它們。
add_action('test', 'func1');
add_action('test', 'func2');
do_action('test'); // Executes func1 and then func2
操作和過濾器之間的區別是雖然它們都可以接受值,但只有過濾器會返回修改後的值。行動本身做一些重要的事情;過濾器會獲取一個值並返回它的修改版本,稍後可以使用它。例如,要利用每一個集團的印刷與the_title
我們可以使用下面的代碼段標題:
add_filter('the_title', function($title) {
return strtoupper($title);
});
因爲我們知道沉迷於the_title
的所有功能 - 掛鉤,而不是功能 - 將被apply_filters
只執行我們希望能在功能the_title
的某處找到它。其實這功能基本上echo get_the_title
,這裏是如何get_the_title
如下:
function get_the_title($id = 0) {
$post = &get_post($id);
$title = isset($post->post_title) ? $post->post_title : '';
$id = isset($post->ID) ? $post->ID : (int) $id;
if (!is_admin()) {
if (!empty($post->post_password)) {
$protected_title_format = apply_filters('protected_title_format', __('Protected: %s'));
$title = sprintf($protected_title_format, $title);
} else if (isset($post->post_status) && 'private' == $post->post_status) {
$private_title_format = apply_filters('private_title_format', __('Private: %s'));
$title = sprintf($private_title_format, $title);
}
}
return apply_filters('the_title', $title, $id);
}
我張貼整個函數因爲學習來尋找源代碼掛鉤是最重要的萌發WordPress開發。源代碼充滿了鉤子,因此它們可以用來修改Wordpress內置函數的許多方面。現在您已在源代碼中找到apply_filters('the_title', ...)
,您可以欣賞它的重要性!
the_title
只需get_the_title
相呼應,給它的值,你可以修改或者甚至取代值get_the_title
返回由過濾器連接到掛鉤the_title
!
現在,我希望你不要認爲我迄今爲止寫的所有內容都是無償的。事實上,現在我們可以輕鬆回答你的主要問題,即「爲什麼它不起作用?」
首先,你永遠不能將the_title
傳遞給一個函數!這將像寫作somefunction($var1, echo $var2, $var3)
。我們不能通過使用echo將值傳遞給函數,因爲echo會將其輸出發送到瀏覽器。
更好的嘗試是你貼
$page_title = apply_filters('the_title',get_the_title());
的之一,但正如我們看到的,get_the_title
已申請the_title
其返回值了。你只是第二次應用所有這些功能。如果您有一些自定義過濾器連接到the_title
或它無能爲力,可能會導致奇怪。所以它要麼混淆結果要麼是無償的。這就是爲什麼你應該簡單地這樣做:
$page_title = get_the_title();
現在,你也說
只是一個代碼位不顯示 標題所有工作正常
這令人困惑,因爲我們不希望變量賦值輸出任何東西!要輸出的標題,你可以這樣做
$page_title = get_the_title();
echo $page_title;
但是,正如我們已經知道,這是真的(看看源代碼,略有差異)一樣:
the_title();
所以我寫了很多隻是爲了得出結論,你可能想自己使用the_title
。但我希望這可以成爲濾鏡/動作鉤子的好資源。
有任何問題歡迎。
你的智慧超越你的年齡!謝謝o WordPress的大師,我混合了變數和功能,導致我的死亡!你已經解決了我的問題,並且感激我一杯啤酒! – R0b0tn1k