2016-09-23 12 views
1

私はWorpressのすべてのカテゴリの親IDをカテゴリ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.5Kのポイントを持っていると信じることはできませんし、そのような返信を与える:/ –

+0

素晴らしいポインタ!それはWordpressの質問よりも一般的なPHPの質問です。それで私はここに投稿しています:...-) –

+0

@HyderB。あなたは信じる必要はありません。 Deisgn Bytes - あなたはここで尋ねた小さな間違いをしました。私はちょうどそれを適切な場所に掲示することを勧めました。 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()に渡すことができ、2番目のパラメータとしてコールバックを使用します。コールバック自体には、参照として渡され、結果のターゲットとして機能する収集/最終配列が割り当てられています。これで、不自然にネストされた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

気高い!フィードバックのために...(int)$ _GET ['current_category']は安全ではないと言っていますか? $ _GET ['current_category']は、整数にキャストしたときの数値です。ゼロまたは正しい数値ですか?または私は何かを逃していますか?衛生は必要ではないでしょうか? –

+0

@DesignBytes数字のようなものがたくさんあります。 IPアドレス。あなたは常に入力を検証して消毒するべきです。 – kaiser

関連する問題