问题解答:今天在使用wp分类字段插件时候提示illegal offset url这种错误
Published
2022-10-15
浏览次数 : 208
我用的是 https://github.com/bainternet/Tax-Meta-Class 代码。
这种错误是因为以前代码写的php版本比较低引起的,我们不可能将PHP版本降低,所以我们要用另外的思路来解决问题。
他一开始的写法是这样:这个写法在5.5版本前完全没问题,但是5.6以后的版本因为安全原因,验证更加严格。
$std = isset($field['std'])) ? $field['std'] : array('id' => '', 'url' => '');
$name = esc_attr( $field['id'] );
$value = isset($meta['id']) ? $meta : $std;
//backwords capability
if (!isset($value['url'])) {
$value['url'] = ''; }
if (!isset($value['id'])) {
$value['id'] = '';
}
错误提示的是$value['url']这一行的url是非法偏移字符。 也就是$value这个数组里面是没有Url这个索引的,我们就一步步查找上去,上一步$value变量是什么。我们查找到上面$std这个变量输出的$field['std']变量为0 , 所以这个结果就有点尴尬了,这个已经设置了isset() 了 所以这个变量输出的结果0 就不是后面的那个带url索引的数组了。
我们给这个变量多加一个验证, 验证不为0的状态,也就是用!empty() 来验证就好,来确保$std = isset($field['std'])) ? $field['std'] : array('id' => '', 'url' => ''); 这个输出的是后面的这个结果。
最终的代码是:
public function show_field_image( $field, $meta ) {
$this->show_field_begin( $field, $meta );
wp_enqueue_script('jquery-ui-sortable');
wp_enqueue_media();
$std = isset($field['std']) && !empty($field['std']) ? $field['std'] : array('id' => '', 'url' => '');
$name = esc_attr( $field['id'] );
$value = isset($meta['id']) ? $meta : $std;
//backwords capability
if (!isset($value['url'])) {
$value['url'] = ''; }
if (!isset($value['id'])) {
$value['id'] = '';
}
$has_image = empty($value['url'])? false : true;
$w = isset($field['width'])? $field['width'] : 'auto';
$h = isset($field['height'])? $field['height'] : 'auto';
$PreviewStyle = "style='width: $w; height: $h;". ( (!$has_image)? "display: none;'": "'");
$id = $field['id'];
$multiple = isset($field['multiple'])? $field['multiple'] : false;
$multiple = ($multiple)? "multiFile " : "";
$value['url'] = isset($value['src'])? $value['src']: $value['url'];
echo "<span class='simplePanelImagePreview'><img {$PreviewStyle} src='{$value['url']}'><br/></span>";
echo "<input type='hidden' name='{$name}[id]' value='{$value['id']}'/>";
echo "<input type='hidden' name='{$name}[url]' value='{$value['url']}'/>";
if ($has_image)
echo "<input class='{$multiple} button simplePanelimageUploadclear' id='{$id}' value='".__('Remove Image')."' type='button'/>";
else
echo "<input class='{$multiple} button simplePanelimageUpload' id='{$id}' value='".__('Upload Image')."' type='button'/>";
$this->show_field_end( $field, $meta );
}
- 标签1
- 标签1
- 标签1