จะใช้ช่องทำเครื่องหมายและปุ่มตัวเลือกในหน้าตัวเลือกได้อย่างไร?


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

หมายเหตุ:แน่นอนว่าควรตรวจสอบให้แน่ใจว่าได้ตั้งค่าคีย์ไว้แล้วก่อนที่จะเปรียบเทียบกับค่าของมัน

ความช่วยเหลือดังกล่าวข้างต้นหรือไม่ ถ้าไม่ก็ให้ฉันรู้ว่าสิ่งที่ต้องการชี้แจง ... (หรือสิ่งที่ฉันหายไป) ..

RE: checked()

คุณสามารถค้นหาฟังก์ชั่นที่ถูกกำหนด (ใน WordPress) ได้ที่นี่ http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

พารามิเตอร์แรกนั้นเป็นข้อความสั่งแบบมีเงื่อนไขและพารามิเตอร์ที่สอง (ถ้าคุณต้องการกำหนด) คือสิ่งที่ต้องตรวจสอบ ค่าเริ่มต้นที่จะเปรียบเทียบกับเป็นจริง ... ดังนั้นถ้าchecked( 1 == 1, true )ฉันต้องทำฉันจะตรวจสอบว่า 1 == 1 เท่ากับจริง หากเงื่อนไขเข้าชมการแข่งขันแล้วคุณจะchecked="checked"กลับมาหาคุณ ..

หมายเหตุ:ฉันขยะที่อธิบายสิ่งต่าง ๆ ดังนั้นหากสิ่งที่ต้องการการชี้แจงเพิ่มเติมฉันจะไม่ขุ่นเคือง ... เพียงแจ้งให้เราทราบ .. ;)


สมองของฉันไม่สามารถใช้งานได้เพราะฉันรู้สึกหงุดหงิดที่ฉันไม่สามารถคิดออกเองได้ คุณช่วยอธิบายอะไรได้checked( 1 == $options['option_one']บ้าง คือchecked()ฟังก์ชั่น PHP เพราะผมไม่สามารถหาได้ในคู่มือการใช้งาน
Joann

ฉันไม่สามารถอธิบายได้ในความคิดเห็นฉันจะอัปเดตคำตอบของฉันในไม่ช้าดูข้างบน .. ;)
t31os

อ่า! ขอบคุณมากสำหรับความช่วยเหลือ! checked()ฟังก์ชั่นเป็นเพียงคนเดียวที่ฉันไม่สามารถหาผ่าน Google เพราะเห็นได้ชัดว่ามันไม่ได้รับการบันทึกไว้ ฉันเคยชินกับการได้รับสิ่งที่ฉันต้องการอย่างแน่นอนเมื่อทำการค้นหา "term + wordpress" :-)
Joann

เพื่อชี้แจงพารามิเตอร์แรกคือสิ่งที่ต้องตรวจสอบที่สองคือสิ่งที่จะเปรียบเทียบค่าแรกกับ ... ดังนั้นคุณสามารถทำเช่นนี้ ... checked( 1, 2 )เพื่อตรวจสอบว่า 1 เท่ากับ 2 ... ซึ่งจะไม่มีอะไรออกมาตั้งแต่นี้ funciton ถูกออกแบบ specificially เพื่อการส่งออกการตรวจสอบของรัฐในช่องทำเครื่องหมายหรือปุ่มวิทยุ .. ในกรณีใด ๆ มีความสุขที่จะช่วยเหลือ ... ;)
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.