Làm thế nào để sử dụng hộp kiểm và nút radio trong trang tùy chọn?


16

Gọi tôi là ngu ngốc nhưng tôi không biết làm thế nào để làm điều đó. Đối với nhập văn bản, tôi sẽ chỉ:

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

và sau đó móc nó vào workdpress bằng cách sử dụng register_setting(). Sau đó tôi có thể nhận được giá trị của nó thông qua get_option('option_name'). Làm thế nào để làm điều đó với các hộp kiểm và nút radio?

Câu trả lời:


25

Tôi có xu hướng lưu trữ nhiều tùy chọn dưới dạng một mảng, vì vậy tôi sẽ có một cái gì đó như thế này ..

<?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'] ); ?> />

Tuy nhiên, nó phụ thuộc vào cách chức năng gọi lại vệ sinh các giao dịch dữ liệu đến với giá trị đã lưu (cuộc gọi lại mà bạn nên xác định là tham số thứ ba của register_setting). Cá nhân khi tôi xử lý các hộp kiểm Tôi không đặt khóa mảng, trong khi những người khác có thể chọn đặt khóa thành 0 (hoặc bất cứ điều gì thay vào đó) ...

Vì vậy, mã của tôi thực sự có xu hướng trông như thế này ..

<?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'] ) ); ?> />

Nếu tôi chỉ xử lý các hộp kiểm, cuộc gọi lại vệ sinh của tôi sẽ trông giống như ..

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

Trích xuất trực tiếp từ một trong các lớp plugin của tôi (một plugin chỉ có các tùy chọn hộp kiểm), nhưng đó không phải là mã mà bạn có thể mong đợi hoạt động nếu bạn sao chép, nó chỉ mang tính minh họa ..

Đối với radio, nếu bạn không sử dụng nhiều lựa chọn, nó sẽ hoạt động như thế này ..

<?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'] ); ?> />

LƯU Ý: Tất nhiên sẽ là khôn ngoan khi kiểm tra khóa được đặt trước khi so sánh với giá trị của nó (tôi đã để nó ở ngoài mức trên để giữ cho nó ngắn).

Đã giúp đỡ ở trên? Nếu không, chỉ cần cho tôi biết những gì cần làm rõ ... (hoặc những gì tôi đang thiếu) ..

RE: checked()

Bạn có thể tìm thấy nơi chức năng được xác định (trong WordPress) tại đây. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

Tham số đầu tiên về cơ bản là một câu lệnh có điều kiện và tham số thứ hai (nếu bạn muốn xác định nó) là điều cần kiểm tra. Giá trị mặc định để so sánh là TRUE ... vì vậy nếu có thì checked( 1 == 1, true )tôi sẽ kiểm tra xem 1 == 1 có bằng đúng không. Nếu điều kiện đạt được một trận đấu, thì bạn sẽ được checked="checked"trả lại cho bạn ..

LƯU Ý: Tôi không thích giải thích mọi thứ, vì vậy nếu những điều trên cần làm rõ thêm, tôi sẽ không bị xúc phạm ... chỉ cần cho tôi biết ..;)


Bộ não của tôi không hoạt động điều này vì tôi thất vọng vì tôi không thể tự mình tìm ra điều này. Bạn có thể giải thích những gì checked( 1 == $options['option_one']không? Là checked()một hàm php vì tôi không thể tìm thấy nó trong hướng dẫn.
Joann

Tôi không thể giải thích trong một bình luận, tôi sẽ cập nhật câu trả lời của tôi ngay, xem ở trên ..;)
t31os

À! Cảm ơn rất nhiều vì sự giúp đỡ! Các checked()chức năng là người duy nhất tôi không thể tìm thấy qua google vì dường như nó không phải tài liệu. Tôi đã quá quen với việc có được chính xác những gì tôi muốn khi truy vấn "term + wordpress". :-)
Joann

Để làm rõ, tham số đầu tiên là những gì cần kiểm tra, thứ hai là so sánh giá trị đầu tiên với ... vì vậy bạn có thể làm điều này chẳng hạn ... checked( 1, 2 )để kiểm tra xem 1 có bằng 2 ... sẽ không tạo ra gì không, vì điều này funciton được thiết kế riêng để xuất ra trạng thái được kiểm tra cho các hộp kiểm hoặc nút radio .. trong mọi trường hợp, vui lòng giúp đỡ ...;)
t31os

33

hộp kiểm:

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

Đài:

<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' ) ); ?> />

Có một lỗi đánh máy trong mã của bạn (loại) ..
t31os

1
Bạn đã trả lời trực tiếp cho câu hỏi, vì vậy bạn nhận được +1 từ tôi ...;)
t31os

3
Đây nên là câu trả lời.

Đây là nó! Giải quyết, nên là câu trả lời.
mircobabini
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.