我找到了一个代码段,用于在下拉菜单中显示类别。它工作正常但是当我打开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; ?>
答案 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作者真的懒惰,而不是编写上面的修复,他们允许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.
}