Làm cách nào tôi có thể lưu một mảng nhiều lựa chọn với API cài đặt cho trang tùy chọn bổ trợ?


10

Tôi nghĩ rằng đây có thể là vấn đề với PHP của tôi hơn là việc tôi sử dụng API cài đặt, nhưng dường như tôi không thể có được Wordpress để lưu một mảng dữ liệu cho hộp đa lựa chọn.

Hộp đa lựa chọn tương ứng với trường meta tùy chỉnh và các tùy chọn chọn là loại bài đăng tùy chỉnh sẽ hiển thị trường meta đó.

Đây là mã hiển thị:

case 'select2':  
        echo "<select id='$id' style='width:15em;height:10em;' class='select$field_class' name='" . $buddha_option_name . "[$id]' multiple>";  
        foreach($choices as $item) {  

            $item = explode("|",$item);  
            $item[0] = esc_html($item[0], 'buddha_textdomain');  

            $selected = ($options[$id]==$item[1]) ? 'selected="selected"' : '';  
            echo "<option value='$item[1]' $selected>$item[0]</option>";  
        } 
        echo "</select>";  
        echo ($desc != '') ? "<br /><span class='description'>$desc</span>" : ""; 
    break;  

$choices được định nghĩa ở đây là 'sự lựa chọn':

$options[] = array(  
    "section" => "custom_meta",  
    "id"      => BUDDHA_SHORTNAME . "_meta_email",  
    "title"   => __( 'Email Meta Box', 'buddha_textdomain' ),  
    "desc"    => __( 'Select post types to have custom email meta box.', 'buddha_textdomain' ),  
    "type"    => "select2",  
    "std"    => print_r($buddha_option_name[$id]),  
    "choices" => array( __('Posts','buddha_textdomain') . "|post", __('Pages','buddha_textdomain') . "|page", __('Faculty/Staff','buddha_textdomain') . "|staff", __('FAQ','buddha_textdomain') . "|faq", __('Documents','buddha_textdomain') . "|docs", __('Courses','buddha_textdomain') . "|courses" )  
);

Và mã xác nhận:

case 'select2': 
                // process $select_values 
                    $select_values = array(); 
                    foreach ($option['choices'] as $k => $v) { 
                        // explode the connective 
                        $pieces = explode("|", $v); 

                        $select_values[] = $pieces[1]; 
                    } 
                // check to see if selected value is in our approved array of values! 
                $valid_input[$option['id']] = (in_array( $input[$option['id']], $select_values) ? $input[$option['id']] : '' ); 
            break; 

Hiện tại, nếu tôi chọn nhiều hơn một giá trị từ trường nhiều lựa chọn, WP sẽ chỉ lưu một giá trị (thường là giá trị bảng chữ cái đầu tiên). Tôi cần nó để lưu nhiều hơn một giá trị trong mảng.

Tôi nghĩ rằng thêm []vào cuối của [$id]có thể giúp đỡ, nhưng không.


Có gì $id? Và tại sao đang sử dụng print_rtrong một bối cảnh gán?
TheDeadMote

$idgiống như "id" => BUDDHA_SHORTNAME . "_meta_email", nó được định nghĩa trong một chức năng khác. Và tôi không thực sự biết tại sao tôi làm print_rở đó, không có ý nghĩa gì phải không?
Spartacus

Bạn đã làm cho nó hoạt động? Addin []ở cuối namethuộc tính đã giúp tôi. Kiểm tra lại thuộc tính tên. Bạn có kiểm tra db myQuery cài đặt nào được lưu trữ không?
Radek

Không liên quan đến câu hỏi của bạn: Tôi nghĩ rằng bạn đã nhầm lẫn esc_html()esc_html__()trong mã hiển thị của bạn. Các cựu chỉ chấp nhận một đối số; cái sau chấp nhận một đối số thứ hai, miền văn bản.
Pat J

Câu trả lời:


1

Vì vậy, có vẻ như hai điều đang diễn ra ở đây:

echo "<select id='$id' style='width:15em;height:10em;' class='select$field_class' name='" . $buddha_option_name . "[$id]' multiple>";  

Như @Radek đã lưu ý, bạn có thể đặt tên của hộp chọn thành một mảng bằng cách sử dụng []- ví dụ name="my_option_name[]"- điều này sẽ dẫn đến việc tệp $_POST['my_option_name']là một mảng các tùy chọn được chọn mà sau đó bạn có thể lưu trữ.

Nhìn kỹ hơn vào mã của bạn, tôi đã bối rối:

$select_values = array(); 
foreach ($option['choices'] as $k => $v) { 
    // explode the connective 
    $pieces = explode("|", $v); 

    $select_values[] = $pieces[1]; 
} 
// check to see if selected value is in our approved array of values! 
$valid_input[$option['id']] = (in_array( $input[$option['id']], $select_values) ? $input[$option['id']] : '' ); 

Bạn chỉ lưu một giá trị vào $valid_input[$option['id']]- switchcâu lệnh của bạn có nằm trong chính vòng lặp không? Nếu vậy, hãy thử thay đổi dòng cuối cùng thành này:

$valid_input[$option['id']][] = (in_array( $input[$option['id']], $select_values) ? $input[$option['id']] : '' );

Lưu ý []trước toán tử gán. Khi bạn lưu $valid_input, nó sẽ coi giá trị của $valid_input[$option['id']]một mảng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.