... 에 표시될 텍스트 'my settings', // admin menu 에 표시될 텍스트 'manage_options', // 권한. // // page slug. // add_settings_section(), add_settings_fields(), do_settings_sections() 의 page 인자로 쓰임. 'my_settings', 'my_settings_output_settings' ); } /** * 메뉴 집어넣는 코드 콜백 */ function my_settings_output_settings() { ?>
'a01' ) ); add_settings_field( 'a02', 'A02', 'my_settings_common', 'my_settings', 'group_a', array( 'id' => 'a02' ) ); add_settings_field( 'a03', 'A03', 'my_settings_common', 'my_settings', 'group_a', array( 'id' => 'a03' ) ); add_settings_field( 'a04', 'A04', 'my_settings_common', 'my_settings', 'group_a', array( 'id' => 'a04' ) ); // 섹션 B add_settings_section( 'group_b', 'Group B', '', 'my_settings' ); add_settings_field( 'b01', 'B01', 'my_settings_common', 'my_settings', 'group_b', array( 'id' => 'b01' ) ); add_settings_field( 'b02', 'B02', 'my_settings_common', 'my_settings', 'group_b', array( 'id' => 'b02' ) ); add_settings_field( 'b03', 'B03', 'my_settings_common', 'my_settings', 'group_b', array( 'id' => 'b03' )); add_settings_field( 'b04', 'B04', 'my_settings_common', 'my_settings', 'group_b', array( 'id' => 'b04' )); // 섹션 C add_settings_section( 'group_c', 'Group C', '', 'my_settings' ); // 한 옵션 키에 여러 값을 저장하기 add_settings_field( 'c01', 'C01', 'my_settings_serialized', 'my_settings', 'group_c', array( 'id' => 'c', 'key' => 'x' ) ); add_settings_field( 'c02', 'C02', 'my_settings_serialized', 'my_settings', 'group_c', array( 'id' => 'c', 'key' => 'y' ) ); add_settings_field( 'c03', 'C03', 'my_settings_serialized', 'my_settings', 'group_c', array( 'id' => 'c', 'key' => 'z' )); add_settings_field( 'c04', 'C04', 'my_settings_serialized', 'my_settings', 'group_c', array( 'id' => 'c', 'key' => 'w' ) ); } /** html 콜백 펑션 */ function my_settings_common( $args ) { $id = esc_attr( $args['id'] ); $value = esc_attr( get_option( 'my_settings_' . $args['id'] ) ); printf( '', $id, $value ); } /** html 콜백 펑션 */ function my_settings_serialized( $args ) { $id = esc_attr( $args['id'] . "[{$args['key']}]" ); $opt = get_option( 'my_settings_' . $args['id'] ); $value = isset( $opt[ $args['key'] ] ) ? esc_attr( $opt[ $args['key'] ] ) : ''; printf( '', $id, $value ); } // 옵션 값의 validation 처리 // 어이없게도 아직 settings API 에는 제대로 된 validation 이 없고 일단 sanitize 만 되면 옵션 값은 모두 DB 로 돌진한다. // 그러므로 만약 옵션 값이 자연수 100 이하의 값만 요구한다 하더라도, 이를 잘 구별할 방법 자체가 존재하지 않는다. // 그러므로 다음과 같은 우회 방법들을 적절히 찾는 것이 좋다. // // 1. 모든 옵션 값들은 디폴트 값을 갖게 하라. // 2. sanitization 단계에서 validation 을 수행한다. validation 이 fail 하면 settings error 를 띄우고, // 입력된 값을 세팅 디폴트로 수정한다. // 3. 사실상 값이 무시된 것으로 간주할 수 있다. function my_settings_custom_sanitize( $value ) { $default = '50'; $v = (int)$value; if( ctype_digit( strval( $value ) ) && 0 < $value && $value < 101 ) { return $value; } add_settings_error( 'my_settings_group', 'error', 'B04 세팅은 1에서 100까지 정수만 가능합니다.' ); return $default; }