该错误意味着您试图将字符串或null作为数组来寻址。也许它返回的匹配数少于5个,在这种情况下$array[0][4]
将被取消设置。
你的问题是:
function thing($content) {
preg_match_all("/(<h[^>]*>.*?<\\/h2>\\n*<p>.*?<\\/p>)/", $content, $array);
$i = 1;
$limit = count($array[0]);
$array = $array[0][4]; // you\'ve overwritten $array with what used to be $array[0][4]
echo $array; //outside loop
while ( $i <= $limit) {
$array = $array[0][4]; // now you\'re trying to overwrite $array again once for every time you go around the loop
echo $array; inside loop
$i++;
}
return $content;
}
add_action(\'the_content\', \'thing\', 50);
让我们重写一下:
function thing($content) {
preg_match_all("/(<h[^>]*>.*?<\\/h2>\\n*<p>.*?<\\/p>)/", $content, $array);
$i = 1;
$limit = count($array[0]);
echo $array[0][4]; //outside loop
while ( $i <= $limit) {
echo $array[0][4]; // inside loop
$i++;
}
return $content;
}
add_action(\'the_content\', \'thing\', 50);
这仍然不是很好的代码,因为它假设数组是5个成员,并且每次循环时都重复相同的值。让我们将while循环重写为for:
for( $i = 0; $i < $limit; $i++ ) {
echo $array[0][$i]; // inside loop
}