옵션 페이지에서 확인란과 라디오 버튼을 사용하는 방법은 무엇입니까?


16

나를 바보라고 불러라. 그러나 나는 그것을하는 방법을 알지 못한다. 텍스트 입력의 경우 다음과 같습니다.

<input type="text" name="option_name"  value="<?php echo get_option( 'option_name' ); ?>" />

를 사용하여 workdpress에 연결하십시오 register_setting(). 그런 다음 통해 그 가치를 얻을 수있었습니다 get_option('option_name'). 확인란과 라디오 버튼으로 어떻게해야합니까?

답변:


25

여러 옵션을 배열로 저장하는 경향이 있으므로 다음과 같은 내용이 있습니다.

<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( 1 == $options['option_one'] ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( 1 == $options['option_two'] ); ?> />

그러나 들어오는 데이터를 삭제하는 콜백 함수가 저장된 값 ( 의 세 번째 매개 변수 정의 해야하는 콜백)을 처리하는 방법에 따라 다릅니다 register_setting. 개인적으로 체크 박스를 다룰 때 다른 사람들이 키를 0 (또는 대신 무엇이든)으로 설정할 수있는 배열 키를 설정하지 않습니다 ...

내 코드는 실제로 다음과 같습니다.

<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( isset( $options['option_one'] ) ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( isset( $options['option_two'] ) ); ?> />

확인란 만 처리하는 경우 내 위생 콜백은 다음과 같이 표시됩니다 ..

public function on_option_save( $options ) {
    if( !is_array( $options ) || empty( $options ) || ( false === $options ) )
        return array();

    $valid_names = array_keys( $this->defaults );
    $clean_options = array();

    foreach( $valid_names as $option_name ) {
        if( isset( $options[$option_name] ) && ( 1 == $options[$option_name] ) )
            $clean_options[$option_name] = 1;
        continue;
    }
    unset( $options );
    return $clean_options;
}

플러그인 클래스 (체크 박스 옵션 만있는 플러그인) 중 하나에서 바로 추출했지만 복사하면 작동 할 것으로 예상되는 코드는 아니며 단지 설명을위한 것입니다.

라디오의 경우 다중 선택을 사용하지 않으면 다음과 같이 진행됩니다.

<?php $options = get_option( 'my_option' ); ?>
<input type="radio" name="myoption[option_three]" value="value1"<?php checked( 'value1' == $options['option_three'] ); ?> />
<input type="radio" name="myoption[option_three]" value="value2"<?php checked( 'value2' == $options['option_three'] ); ?> />

노트: 물론 키 값을 비교하기 전에 키가 설정되어 있는지 확인하는 것이 현명합니다 (단, 키를 짧게 유지하려면 위의 내용을 생략했습니다).

위의 도움이 되었습니까? 그렇지 않은 경우 설명이 필요한 사항 만 알려주십시오 (또는 내가 누락 된 항목) ..

레: checked()

여기에서 함수가 정의 된 위치를 찾을 수 있습니다 (WordPress에서). http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

첫 번째 매개 변수는 기본적으로 조건문이며 두 번째 매개 변수 (정의하려는 경우)는 확인할 대상입니다. 비교할 기본값은 TRUE입니다 ... 그렇다면 checked( 1 == 1, true )1 == 1이 true인지 확인하고 싶습니다. 조건부가 일치하면checked="checked" 반환됩니다 ..

참고 : 나는 설명하기에 쓰레기이므로 위의 설명이 더 필요하면 기분 나빠하지 않을 것입니다 ... 그냥 알려주십시오 ..;)


나는 내 자신이 이것을 알아낼 수 없다는 것에 좌절했기 때문에 내 뇌는이 ime을 작동하지 않습니다. 무엇을 설명 할 checked( 1 == $options['option_one']수 있습니까? 가 checked()나는 설명서를 찾을 수 없습니다 때문에 PHP 함수는.
Joann

나는 설명에 설명 할 수 없다, 나는 나의 대답을 곧 업데이트 할 것이다. 위를 보라 ..;)
t31os

아! 도와 주셔서 감사합니다! 이 checked()기능은 문서화되지 않았기 때문에 Google을 통해 찾을 수없는 유일한 기능입니다. "term + wordpress"를 쿼리 할 때 원하는 것을 정확히 얻는 데 익숙했습니다. :-)
Joann

명확히하기 위해 첫 번째 매개 변수는 확인할 사항이고 두 번째 매개 변수는 첫 번째 값을 비교하는 것입니다 ... 예를 들어이 작업을 수행 할 수 있습니다 ... checked( 1, 2 )1이 2인지 확인하십시오. funciton은 체크 박스 나 라디오 버튼의 체크 상태를 출력하도록 특별히 설계되었습니다. 어쨌든 기꺼이 도와 드리겠습니다 ...;)
t31os

33

확인란 :

<input name="option_name" type="checkbox" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />

라디오:

<input name="option_name" type="radio" value="0" <?php checked( '0', get_option( 'option_name' ) ); ?> />
<input name="option_name" type="radio" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />

코드에 오타가 있습니다 (유형).
t31os

1
당신은 그 질문에 대한 직접적인 대답을했습니다. 그래서 당신은 나에게서 +1을 얻습니다 ...;)
t31os

3
이것이 답이되어야합니다.

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