2016-09-23 159 views
1

我已經編寫了下面的函數來按類別id返回Worpress中所有類別的父級ID。一切工作正常,除非它不返回數組...任何建議將是偉大的! :-)遞歸函數不返回數組

$current_category = (int) $_GET['current_category']; 
$cat_ids = array($current_category); 

function getParentCatIds($current_category,$cat_ids){ 
    $child = get_category($current_category); 
    $parent_id = $child->parent; 
    if($parent_id !== 0){ 
     array_push($cat_ids, $parent_id); 
     getParentCatIds($parent_id,$cat_ids); 
    }else{ 
     var_dump($cat_ids); // <--- this returns the right array 
     return $cat_ids; // <--- this returns NULL 
    } 
} 

if($current_category){ 
    $cat_ids = getParentCatIds($current_category,$cat_ids); 
    var_dump($cat_ids); // <--- this returns NULL 
} 

回答

1

當你打電話getParentCatIds()(第9行),你沒有做任何事情返回的功能。您應該分配或返回它。

+0

只有當parent_id = 0時纔會返回,見第7行。所以這不會有問題。最高級別爲0.返回的是第12行。 –

+0

我的錯誤!你是對的!返回是修復! :-) –

-4

1)你應該問在wordpress.stackexchange.com

2)我認爲,解決辦法是:上線9,而不是
getParentCatIds($parent_id,$cat_ids); 你應該有
return getParentCatIds($parent_id,$cat_ids);

+2

我不能相信你有13.5 K點,並給予這樣的答覆:/ –

+0

偉大的指針!這是一個比Wordpress問題更普遍的PHP問題。這就是爲什麼我把它張貼在這裏:-) –

+0

@HyderB。你不必相信:)Deisgn字節 - 你犯了一個小錯誤,你在這裏問過,我只是建議將它張貼在適當的地方。也發佈了PHP問題,對WP相關函數有了更深入的瞭解。我已經更新了答案。 –

0

你應該總是消毒輸入。一個好的起點是filter_var()。使用validationsanitization的正確標誌並使輸入保存(r)。請注意,FILTER_VALIDATE_*只會告訴您某些內容是否有效,而FILTER_SANITIZE_*實際上會將您的數據從不需要的和潛在的惡意數據中清除。

$currentCat = intval($_GET['current_category']); 
$currentCat = filter_var($currentCat, FILTER_SANITIZE_NUMBER_INT); 
if (empty($currentCat)) { 
    // Abort – no valid data 
    return; 
} 

然後,您可以構建一個包含您的原始類別父ID的數組。這可以傳遞給array_walk(),回調作爲第二個參數。回調本身已經分配了一個收集/最終數組,該數組作爲參考傳遞並作爲結果的目標。現在,您可以遞歸地循環遍歷嵌套的WordPress類別層次結構。

// Base array 
$parents = []; 
$callback = function($index, $id) use (&$parent) { 
    0 !== get_category($id)->parent and $parents[] = $id; 
}; 
array_walk([ get_category($currentCat)->parent ], $callback); 
+0

Thanx!對於反饋...你是說(int)$ _GET ['current_category']不安全嗎? $ _GET ['current_category']是一個數字,當我把它轉換爲一個int時,它將是零或正確的數字?或者我錯過了什麼?衛生沒有必要? –

+0

@DesignBytes有很多東西可以是一個數字 - 例如一個IP地址。你應該總是驗證和消毒輸入。 – kaiser