0

我要修改的函数中有一个循环:

foreach ( $form_fields as $key => $val ) {
        if ( 'menu_order' == $key ) {
            if ( $gallery )
                $order = "<div class='menu_order'> <input class='menu_order_input' type='text' id='attachments[$attachment_id][menu_order]' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ). "' /></div>";
            else
                $order = "<input type='hidden' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ) . "' />";

            unset( $form_fields['menu_order'] );
            break;
        }
    }

此循环循环通过 $form_fields 数组。如果“menu_order”是关键,那么,做一些事情并打破。现在我想再添加一个键来完成上述操作。所以,我修改如下:

foreach ( $form_fields as $key => $val ) {
    if ( 'menu_order' == $key ) {
        if ( $gallery )
            $order = "<div class='menu_order'> <input class='menu_order_input' type='text' id='attachments[$attachment_id][menu_order]' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ). "' /></div>";
        else
            $order = "<input type='hidden' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $val['value'] ) . "' />";

        unset( $form_fields['menu_order'] );

    }

    if ( 'post_status' == $key ) {
    if ( $gallery )
        $status = "<div class='post_status'> <input class='post_status_input' type='text' id='attachments[$attachment_id][post_status]' name='attachments[$attachment_id][post_status]' value='" . esc_attr( $val['value'] ). "' /></div>";
    else
        $status = "<input type='hidden' name='attachments[$attachment_id][post_status]' value='" . esc_attr( $val['value'] ) . "' />";

    unset( $form_fields['post_status'] );
    break;
}

}

请注意,我删除了原始代码中的中断,在循环末尾添加了中断。我认为这应该使循环直到完成我新添加的块。但是这段代码没有按预期打印 post_status 输入框。我在循环中哪里出错了?

4

2 回答 2

2

这是一个简单的解决方法:摆脱循环。由于您知道键,因此不需要它,只需执行此操作即可直接访问数组元素:

if ( $gallery )
    $order = "<div class='menu_order'> <input class='menu_order_input' type='text' id='attachments[$attachment_id][menu_order]' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $form_fields['menu_order']['value'] ). "' /></div>";
else
    $order = "<input type='hidden' name='attachments[$attachment_id][menu_order]' value='" . esc_attr( $form_fields['menu_order']['value'] ) . "' />";

unset( $form_fields['menu_order']);

对领域做同样的事情'post_status'

于 2012-06-17T00:38:50.963 回答
1

看起来你想在两者之后打破循环$order并被$status发现。$order如果是这样,您希望在两种情况之后都有一个额外的 if 语句来检查并确保两者$status都已设置,并且只有在这种情况下才中断。

就像是:

if (isset($order) && isset($status)) {
    break;
}

也就是说,还要检查功能。它可能只检查 的值$order,而忽略 的值$status

于 2012-06-17T00:35:06.117 回答