1

ドロップダウン メニューにカテゴリを表示するコード スニペットを見つけました。正常に動作しますが、電源を入れるとdefine('WP_DEBUG', true);、Wordpress に上記の警告が表示されます。PHP を使い始めたばかりで、この警告を修正する方法がわかりません。誰かがこれについて私を助けて、なぜこのメッセージが表示されるのか教えてもらえますか?

<?php
function replace_id_for_slug($option){
        $categories = get_categories("hide_empty=0");
        preg_match('/value="(\d*)"/', $option[0], $matches);
        $id = $matches[1]; //problem on this line!
        $slug = "";
    foreach($categories as $category){
        if($category->cat_ID == $id){
            $slug = $category->slug;
            }
    }
return preg_replace("/value=\"(\d*)\"/", "value=\"$slug\"", $option[0]);
}
$select = wp_dropdown_categories("show_option_none=Category&hierarchical=1&hide_empty=0&echo=0");
$select = preg_replace_callback("#<option[^>]*>[^<]*</option>#", "replace_id_for_slug", $select);
echo $select; ?>
4

2 に答える 2

2
preg_match('/value="(\d*)"/', $option[0], $matches);
$id = $matches[1]; //problem on this line!

何かが一致したかどうかを確認しませんでした。一致しなかった場合、$matches[1]は存在しません。かなり自明です!

私は次のようなものを提案します:

function replace_id_for_slug($option) {

    $categories = get_categories("hide_empty=0");
    preg_match('/value="(\d*)"/', $option[0], $matches);

    if (!$matches) {
       // return as if $id is empty if no match
       return preg_replace('/value="(\d*)"/', 'value=""', $option[0]);
    }

    $id   = $matches[1];
    $slug = "";

    foreach ($categories as $category) {
        if ($category->cat_ID == $id) {
            $slug = $category->slug;
        }
    }

    return preg_replace('/value="(\d*)"/', 'value="' . $slug . '"', $option[0]);
}

これがWordpressのコア機能の場合:

実際に起こっていることは、Wordpress の作成者が非常に怠惰であり、上記の修正を記述する代わりに、PHP がE_NOTICE. 「デバッグモード」が特定のエラー報告機能をオンにしているため、これが表示されています。

于 2011-08-13T14:50:54.537 に答える
1

これはおそらく、正規表現が何にも一致せず、したがって $matches[1] が未定義であるためです。

preg_match何も見つからない場合、$matches は空の配列です。コードを変更して、preg_match実際に何かが一致したかどうかを確認できます。

if (preg_match('/value="(\d*)"/', $option[0], $matches)){
    $id = $matches[1];
} else {
    // set id to a different value.
}
于 2011-08-13T14:45:19.103 に答える