Wordpress“通知:未定义的偏移量:1”

时间:2011-08-13 14:38:48

标签: php wordpress custom-wordpress-pages

我找到了一个代码段,用于在下拉菜单中显示类别。它工作正常但是当我打开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; ?>

2 个答案:

答案 0 :(得分: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忽略这个问题。您正在看到它,因为他们的“调试模式”正在启用某些错误报告功能。

答案 1 :(得分: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.
}