플러그인 옵션 페이지의 설정 API를 사용하여 다중 선택 배열을 저장하려면 어떻게해야합니까?


10

설정 API를 사용하는 것이 아니라 PHP에서 더 많은 문제가 될 수 있다고 생각하지만 다중 선택 상자에 대한 데이터 배열을 Wordpress에 저장하지 못하는 것 같습니다.

다중 선택 상자는 사용자 정의 메타 필드에 해당하며 선택 옵션은 해당 메타 필드를 표시하는 사용자 정의 게시물 유형입니다.

표시 코드는 다음과 같습니다.

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 여기에 '선택'으로 정의됩니다.

$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" )  
);

그리고 검증 코드 :

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; 

현재 다중 선택 필드에서 둘 이상의 값을 선택하면 WP는 하나의 값 (보통 첫 번째 알파벳 값) 만 저장합니다. 배열에 둘 이상의 값을 저장하려면 필요합니다.

나는 []끝에 [$id]도움 이 될 것이라고 생각 했지만 그렇지 않습니다.


무엇입니까 $id? print_r할당 컨텍스트에서 왜 사용 하고 있습니까?
TheDeadMedic

$id와 동일하며 "id" => BUDDHA_SHORTNAME . "_meta_email"다른 함수에 정의되어 있습니다. 그리고 나는 왜 내가 print_r거기에서 했는지 알지 못합니다. 별로 이해가되지 않습니까?
스파르타쿠스

작동 시켰습니까? 속성 []끝에 추가 기능이 name도움이되었습니다. 이름 속성을 다시 확인하십시오. 어떤 설정이 저장되어 있는지 mySQL db를 확인합니까?
Radek

귀하의 질문에 관련없는 : 당신이 혼란 한 생각 esc_html()esc_html__()디스플레이 코드. 전자는 하나의 주장 만 받아들입니다. 후자는 텍스트 도메인이라는 두 번째 인수를 허용합니다.
Pat J

답변:


1

두 가지 일이 진행되고있는 것 같습니다.

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

@Radek에서 언급 한 바와 같이, 당신은 할 수 사용하여 선택 상자의 이름 배열을 만든 []예 - name="my_option_name[]"-이이 제기 될 것입니다 $_POST['my_option_name']당신이 다음 저장할 수 선택한 옵션의 배열 인.

귀하의 코드를 자세히 살펴보면 나에게 충격을 받았습니다.

$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']] : '' ); 

하나의 값만 저장하는 것입니다 $valid_input[$option['id']]- switch문장 자체가 루프 자체입니까? 그렇다면 마지막 줄을 다음과 같이 변경하십시오.

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

[]대입 연산자 앞에 유의하십시오 . 저장하면 $valid_input의 값을 $valid_input[$option['id']]배열로 취급해야합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.