2012-08-01 84 views
3
add_filter('wp_list_pages_excludes', 'gr_wp_list_pages_excludes'); 

function gr_wp_list_pages_excludes($exclude_array) {  
    $id_array=$array('22'); 
    $exclude_array=array_merge($id_array, $exclude_array); 
    return $exclude_array; 
} 

我是wordpress的新手。上面的代碼工作正常。但我需要傳遞額外的參數,例如$ mu_cust_arg到函數gr_wp_list_pages_excludes。我如何通過apply_filters或其他方法來使用它? 任何幫助表示讚賞。如何將其他參數傳遞給wordpress過濾器?

在此先感謝。

+0

有一個偉大的答案,這在在:http://wordpress.stackexchange.com/a/45920/4994 – ptim 2013-11-20 04:19:00

回答

4

因爲WP不接受閉包作爲回調(至少,當然不是add_filter()),簡短的答案是「你不行」。至少,不是一個整潔的方式。

這裏有幾個選項,取決於你在做什麼。首先是最好的,但你可能不能夠使用它:

編寫調用你的函數包裝函數:

function gr_wp_list_pages_excludes_1 ($exclude_array) { 
    $custom_arg = 'whatever'; 
    gr_wp_list_pages_excludes_1($exclude_array, $custom_arg) 
} 

,如果你總是傳遞相同的自定義這隻會工作在給定情況下的參數 - 你可以爲每種不同情況編寫一個包裝函數,並將包裝函數的名稱傳遞給add_filter()。另外,如果你希望它是真正的動態,你需要...

使用全局變量:(編號:Variable scope$GLOBALS

function gr_wp_list_pages_excludes($exclude_array) { 
    global $gr_wp_list_pages_excludes_custom_arg; 
    $id_array=$array('22'); 
    $exclude_array=array_merge($id_array, $exclude_array); 
    return $exclude_array; 
} 

使用這種方法意味着您可以將您喜歡的任何數據通過分配給全局範圍內的$gr_wp_list_pages_excludes_custom_arg傳遞給函數。這通常被認爲是不好的做法,並且被大量地忽視,因爲它會造成雜亂和不可讀的代碼,並留下內存空間散佈着額外的變量。請注意,我已經將變量名設置得非常長,並且特定於該函數以避免衝突 - 這是使用全局變量的另一個問題。雖然這會起作用,但只有在絕對必要時才能使用它。

+0

謝謝,我只是爲了排除使用重複使用get_option來分配$ custom_arg。第一種方法適合分配動態值。我接受這個答案以獲得很好的指導。 – joHN 2012-08-01 06:53:47

0

非常簡單!

add_filter('filter_name','my_func',10,3);  //three parameters lets say.. 
my_func($first,$second,$third){ 
    //............ 
} 

然後

echo apply_filters('filter_name',$a,$b,$c); 
相關問題