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」がキーである場合は、何かをして中断します。ここで、上記のようにするためのキーをもう1つ追加します。そこで、次のように変更しました。

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 に答える