我已经搜索过并且无法找到答案。
tl; dr我有一个wordpress主题,不再得到创作者的支持,我正试图摆脱一些页面顶部弹出的警告文字。我不是程序员,所以我不知道该怎么做,但我确实理解代码足以修补其他地方的修复程序。我需要帮助。
这是我得到的:
Warning: Illegal string offset 'group_no' in file1.php on line 196
Warning: Illegal string offset 'order_no' in file1.php on line 196
Warning: Illegal string offset 'group_no' in file1.php on line 200
这是file1.php的相关代码:
function get_location( $location, $post_id )
{
// loaded by PHP already?
if( !empty($location) )
{
return $location;
}
// vars
$groups = array();
$group_no = 0;
// get all rules
$rules = get_post_meta($post_id, 'rule', false);
if( is_array($rules) )
{
foreach( $rules as $rule )
{
// if field group was duplicated, it may now be a serialized string!
$rule = maybe_unserialize($rule);
// does this rule have a group?
// + groups were added in 4.0.4
if( !isset($rule['group_no']) )
{
$rule['group_no'] = $group_no;
// sperate groups?
if( get_post_meta($post_id, 'allorany', true) == 'any' )
{
$group_no++;
}
}
// add to group
$groups[ $rule['group_no'] ][ $rule['order_no'] ] = $rule; // this is line 196
// sort rules
ksort( $groups[ $rule['group_no'] ] );
}
// sort groups
ksort( $groups ); //this is line 200
}
// return fields
return $groups;
}
我知道这是某种类型的数组赋值错误,但我对php不太熟悉,无法理解错误是什么以及如何解决它。如何在保留功能的同时重建此代码以使错误消失?
答案 0 :(得分:0)
我不能保证这会修复代码的预期目的,但它应该摆脱非法字符串偏移错误:
<?php
// Lines 0..194
if (true === is_array($groups)
&& true === key_exists('group_no', $rule)
&& true === key_exists('order_no', $rule)
) {
// original line 196
$groups[ $rule['group_no'] ][ $rule['order_no'] ] = $rule;
}
以下是$groups
数组时的行为示例:https://eval.in/975271
以下是$groups
为字符串时的行为示例:https://eval.in/975273
两者都没有错误输出!
答案 1 :(得分:0)
我不知道是什么让代码准确, 但是在框外思考 ,我认为你可以禁用任何/所有WordPress和PHP警报,因为消息是什么你得到的是简单的警告,代码可以继续执行,尽管没有预期的行为。
您可以尝试在文件启动时添加error_reporting(0)
或直接在php.ini中禁用。更多信息:
PD:我知道这个解决方案确实无法解决代码问题,但此时您的目标是消除消息并维护正常的页面方面。