来自 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 );