来自 IF / else 语句的数组变量范围
Array variable scope from IF / else statement
版本 A 正确更新 post,但版本 B 失败。
版本 A 在每个 IF / ELSE 语句中包含 wp_update_post。版本 B 在末尾有 wp_update_post,在 IF / ELSE 语句之外。
这是预期的行为吗?
版本 A
if ( $letter == 'A' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'A Title',
'post_name' => $post_id
);
wp_update_post( $my_post );
} elseif ( $letter == 'B' ) {
$name_field = $_POST['acf'][field_55749b0918a33]; // Name
$my_post = array(
'ID' => $post_id,
'post_title' => 'B Title',
'post_name' => $post_id
);
wp_update_post( $my_post );
} elseif ( $letter == 'C' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'C Title',
'post_name' => $post_id
);
wp_update_post( $my_post );
}
版本 B
if ( $letter == 'A' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'A Title',
'post_name' => $post_id
);
} elseif ( $letter == 'B' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'B Title',
'post_name' => $post_id
);
} elseif ( $letter == 'C' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'C Title',
'post_name' => $post_id
);
}
wp_update_post( $my_post );
无论出于何种原因,我认为您的函数被调用了两次。在版本 B 中,如果您的函数被调用但 $letter
未定义或不匹配您的任何 if
条件,则 wp_update_post( $my_post );
将被调用,并且 $mypost
将未定义.
要对此进行测试,请尝试 运行 版本 B,并在 if
块的 外部 创建数组的另一个版本。如果这最终出现在您的输出中,那么您就知道该函数以某种方式被调用了两次。
在版本 A 中,如果 $letter ='a' 或 'b' 或 'c' 而不是 'd',则函数 wp_update_post() 开始,在版本 B 这个功能开始 $letter='a-z'
这是一个范围问题,如果你在 if 构造之外使用变量,你也应该在外面声明它,
$my_post = array(
'ID' => 0
'post_title' => '',
'post_name' => ''
);
if ( $letter == 'A' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'A Title',
'post_name' => $post_id
);
} elseif ( $letter == 'B' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'B Title',
'post_name' => $post_id
);
} elseif ( $letter == 'C' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'C Title',
'post_name' => $post_id
);
}
wp_update_post( $my_post );
或更好:
$my_post = array(
'ID' => $post_id,
'post_title' => '',
'post_name' => $post_id
);
switch($letter){
case 'A':
case 'B':
case 'C':
$my_post['post_title'] = $letter . " Title"
break;
default:
break;
}
wp_update_post( $my_post );
版本 A 正确更新 post,但版本 B 失败。
版本 A 在每个 IF / ELSE 语句中包含 wp_update_post。版本 B 在末尾有 wp_update_post,在 IF / ELSE 语句之外。
这是预期的行为吗?
版本 A
if ( $letter == 'A' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'A Title',
'post_name' => $post_id
);
wp_update_post( $my_post );
} elseif ( $letter == 'B' ) {
$name_field = $_POST['acf'][field_55749b0918a33]; // Name
$my_post = array(
'ID' => $post_id,
'post_title' => 'B Title',
'post_name' => $post_id
);
wp_update_post( $my_post );
} elseif ( $letter == 'C' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'C Title',
'post_name' => $post_id
);
wp_update_post( $my_post );
}
版本 B
if ( $letter == 'A' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'A Title',
'post_name' => $post_id
);
} elseif ( $letter == 'B' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'B Title',
'post_name' => $post_id
);
} elseif ( $letter == 'C' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'C Title',
'post_name' => $post_id
);
}
wp_update_post( $my_post );
无论出于何种原因,我认为您的函数被调用了两次。在版本 B 中,如果您的函数被调用但 $letter
未定义或不匹配您的任何 if
条件,则 wp_update_post( $my_post );
将被调用,并且 $mypost
将未定义.
要对此进行测试,请尝试 运行 版本 B,并在 if
块的 外部 创建数组的另一个版本。如果这最终出现在您的输出中,那么您就知道该函数以某种方式被调用了两次。
在版本 A 中,如果 $letter ='a' 或 'b' 或 'c' 而不是 'd',则函数 wp_update_post() 开始,在版本 B 这个功能开始 $letter='a-z'
这是一个范围问题,如果你在 if 构造之外使用变量,你也应该在外面声明它,
$my_post = array(
'ID' => 0
'post_title' => '',
'post_name' => ''
);
if ( $letter == 'A' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'A Title',
'post_name' => $post_id
);
} elseif ( $letter == 'B' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'B Title',
'post_name' => $post_id
);
} elseif ( $letter == 'C' ) {
$my_post = array(
'ID' => $post_id,
'post_title' => 'C Title',
'post_name' => $post_id
);
}
wp_update_post( $my_post );
或更好:
$my_post = array(
'ID' => $post_id,
'post_title' => '',
'post_name' => $post_id
);
switch($letter){
case 'A':
case 'B':
case 'C':
$my_post['post_title'] = $letter . " Title"
break;
default:
break;
}
wp_update_post( $my_post );