2014-03-06 44 views
1

我想爲我的多作者網站上的每位作者創建一個自定義作者頁面。 (我正在使用Wordpress的創世紀框架。)如何在PHP中傳遞參數(Wordpress,Genesis)

有兩個任務:1.從數據庫動態檢索作者信息2.使用鉤子顯示它。我對第1部分沒有任何問題,但是試圖通過鉤子傳遞信息,讓它顯示在頁面上我想要的位置,這讓我難住了。

我的方法是創建一個author.php文件。這是我到目前爲止有:

<?php 
// this is the function I want to use to output my stuff. 
function include_author_info($author_info) { 
    echo $author_info; 
} 

// now we want to add this action to the Genesis loop 
add_action('genesis_before_loop', 'include_author_info', 5, 1); 

// now I populate the data I will feed to the function 
// first: set curauth based on the current author 
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author)); 
// next: store the curauth name 
$user_name = $curauth->display_name; 
// additionally: store the user bio for the curauth 
$user_bio = $curauth->user_description; 
// concatenate the name and bio into one formatted string 
$formatted_user_info = "<h2> " . $user_name . "</h2><br /><p>" . $user_bio . "</p>"; 
// for testing purposes, I output the concatenated and formatted name/bio 
echo $formatted_user_info; 

// finally, I execute the action 
do_action('include_author_info', $formatted_user_info); 

//* Run the Genesis loop 
genesis(); 

我知道我正確地檢索作者姓名和作者的生物,還因爲測試線輸出正是我想要的信息正確格式化顯示。 (網站在這裏是可見的:http://difficultrun.nathanielgivens.com/author/nathaniel/

但是,實際的函數(include_author_info)絕對是nada。這似乎是世界上最簡單的事情,我只想將一個字符串傳遞給該函數並輸出它。這是一個1行功能。但它不會工作。我可以輸出一個常量,如「你好,世界!」或任何我想要它去的地方,但我無法通過論證。

我已經要求在Genesis論壇(沒有運氣)的幫助,並做了研究。我發現這兩個頁面的幫助,但他們並沒有解決我的問題: can I pass arguments to my function through add_action? http://codex.wordpress.org/Function_Reference/do_action

預先感謝任何幫助。

+0

你打電話與do_action的功能,並且還試圖與genesis_before_loop鉤來執行呢?我的猜測是,它正在通過鉤子執行,並沒有任何參數傳遞給它。如果你要通過掛鉤來執行你的函數,你能否刪除參數並在函數體中檢索作者信息? – clhereistian

+0

>>你是否用do_action調用函數,並試圖用genesis_before_loop鉤子執行它?<< 我研究過的東西表明,如果你想傳遞參數,你必須先做一個add_action,然後再做一個do_action ,其中參數實際上來自do_action。所以,這就是我想要做的。 >>你可以刪除參數並檢索作者信息在你的函數體?<< 這是我3周前開始的地方,但它從來沒有這樣做過。我不知道$ curauth行是否在函數的上下文中不起作用,或者它是顯示問題。 –

回答

2

基於我的研究,簡單的答案是,當您通過鉤子添加該函數時,無法將參數傳遞給自定義函數。這是不可能的。

但是,您可以聲明要作爲全局變量傳遞的變量,然後編寫函數以訪問該全局變量。我試了一下,它的工作。這是我的完整代碼:

<?php 

// now I populate the data I will feed to the function 
// first: set curauth based on the current author 
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author)); 
// next: store the curauth name 
$user_name = $curauth->display_name; 
// additionally: store the user bio for the curauth 
$user_bio = $curauth->user_description; 
// create a global variable my function can access 
global $formatted_user_info; 
// concatenate the name and bio into one formatted string 
$formatted_user_info = "<h2> " . $user_name . "</h2><br /><p>" . $user_bio . "</p>"; 
// for testing purposes, I output the concatenated and formatted name/bio 
// echo $formatted_user_info; 

// now we want to add this action to the Genesis loop 
add_action('genesis_before_loop', 'include_author_info'); 

// this is the function I want to use to output my stuff. 
function include_author_info($author_info) { 
    global $formatted_user_info; 
    echo $formatted_user_info; 
} 

//* Run the Genesis loop 
genesis(); 

我發現這篇文章,幫助我得到這個工作是在這裏:http://wordpress.org/support/topic/pass-variable-to-function-in-add_action

0

我仍然認爲這個genesis_before_loop動作是在沒有參數的情況下觸發的。嘗試在那裏輸出一些調試信息。

function include_author_info($author_info) { 
    echo "In author info function - value of param [" . $author_info . "]"; 

} 

並把線正上方do_action

echo "executing action"; 
// finally, I execute the action 
do_action('include_author_info', $formatted_user_info); 

讓我知道輸出。

+0

這是我從函數中得到的輸出: 在作者信息函數中 - 參數值[] 文本「正在執行的動作」也與其餘的調試文本一起顯示。 雖然我不確定這有多幫助。我不知道除了do_action之外,還有其他的參數傳遞給我的函數。 我真的很感謝你的幫助。 –

+0

「在作者信息中......」是否只顯示一次或多次?與此相關的「執行行動」在哪裏? – clhereistian

+0

「在作者信息...」中顯示一次。它顯示在genesis_before_loop位置。 「正在執行的動作」行顯示在頁面的最頂部,在開始的html標記之前。 –