add_settings_field ()에서 콜백 함수로 인수를 전달하는 방법은 무엇입니까?


16

다음과 같은 기능이 있습니다.

add_settings_field( 'contact_phone', 'Contact Phone', 'settings_callback', 'general');

작동합니다. settings_callback을 호출합니다. 멋있는. 내가 가진 문제는 내가하고있는 모든 것이 약간의 물건을 에코하는 경우 추가하는 모든 설정에 대해 콜백 함수를 정의하고 싶지 않다는 것입니다.

function settings_callback()
{
    echo '<input id="contact_phone" type="text" class="regular-text" name="contact_phone" />';
}

왜 지구상에서 그렇게해야합니까? id, 클래스 및 이름은 모두 params 여야합니다.

settings_callback 함수에 매개 변수를 전달할 방법이 없습니까? 핵심을 살펴보기 시작했습니다. http://core.trac.wordpress.org/browser/tags/3.1.3/wp-admin/includes/template.php

..이 $ wp_settings_fields 전역에 빠졌습니다. 이것은 어디에 정의되어 있습니까?

답변:


24

함수 선언을보십시오 :

function add_settings_field(
    $id,
    $title,
    $callback,
    $page,
    $section = 'default',
    $args    = array()
) { }

마지막 매개 변수는 인수를 받아서 콜백 함수에 전달합니다.

플러그인 공개 연락처 데이터의 예

    foreach ( $this->fields as $type => $desc )
    {
        $handle   = $this->option_name . "_$type";
        $args     = array (
            'label_for' => $handle,
            'type'      => $type
        );
        $callback = array ( $this, 'print_input_field' );

        add_settings_field(
            $handle,
            $desc,
            $callback,
            'general',
            'default',
            $args
        );
    }

함수 print_input_field()는 다음 인수를 첫 번째 매개 변수로 가져옵니다.

/**
 * Input fields in 'wp-admin/options-general.php'
 *
 * @see    add_contact_fields()
 * @param  array $args Arguments send by add_contact_fields()
 * @return void
 */
public function print_input_field( array $args )
{
    $type   = $args['type'];
    $id     = $args['label_for'];
    $data   = get_option( $this->option_name, array() );
    $value  = $data[ $type ];

    'email' == $type and '' == $value and $value = $this->admin_mail;
    $value  = esc_attr( $value );
    $name   = $this->option_name . '[' . $type . ']';
    $desc   = $this->get_shortcode_help( $type );

    print "<input type='$type' value='$value' name='$name' id='$id'
        class='regular-text code' /> <span class='description'>$desc</span>";
}

전역 변수를 건드릴 필요가 없습니다.

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