Làm cách nào để chuyển đối số từ add_sinstall_field () sang hàm gọi lại?


16

Tôi có một chức năng như thế này:

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

Điều đó làm việc. Nó gọi settings_callback. Mát mẻ. Vấn đề tôi gặp phải là: Tôi không muốn phải xác định chức năng gọi lại cho mọi cài đặt tôi thêm, nếu tất cả những gì tôi đang làm là lặp lại một chút nội dung.

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

Tại sao trên trái đất tôi phải làm điều đó? Tất cả id, class và name đều là params.

Có cách nào để truyền tham số cho hàm settings_callback không? Tôi bắt đầu nhìn vào lõi, đến đây: http://core.trac.wordpress.org/browser/tags/3.1.3/wp-admin/includes/template.php

..và chạy vào $ wp_sinstall_fields toàn cầu này. Điều này được định nghĩa ở đâu?

Câu trả lời:


24

Nhìn vào khai báo cho hàm:

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

Tham số cuối cùng lấy các đối số của bạn và chuyển chúng đến hàm gọi lại.

Ví dụ từ plugin của tôi Dữ liệu liên hệ công khai

    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
        );
    }

Hàm print_input_field()lấy các đối số này làm tham số đầu tiên:

/**
 * 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>";
}

Không cần phải chạm vào một biến toàn cầu.

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.