วิธีการกรองผู้ใช้ในหน้าผู้ใช้ผู้ดูแลระบบโดยเขตข้อมูลเมตาที่กำหนดเอง?


9

ปัญหา

WP ปรากฏขึ้นเพื่อลบค่าของตัวแปรคิวรีของฉันก่อนที่จะถูกใช้เพื่อกรองรายชื่อผู้ใช้

รหัสของฉัน

ฟังก์ชั่นนี้เพิ่มคอลัมน์ที่กำหนดเองในตารางผู้ใช้ของฉันเมื่อ/wp-admin/users.php:

function add_course_section_to_user_meta( $columns ) {
    $columns['course_section'] = 'Section';
    return $columns;
}
add_filter( 'manage_users_columns', 'add_course_section_to_user_meta' );

ฟังก์ชั่นนี้จะบอก WP ถึงวิธีเติมค่าในคอลัมน์:

function manage_users_course_section( $val, $col, $uid ) {
    if ( 'course_section' === $col )
        return get_the_author_meta( 'course_section', $uid );
}
add_filter( 'manage_users_custom_column', 'manage_users_course_section' );

สิ่งนี้จะเพิ่มรายการแบบหล่นลงและFilterปุ่มด้านบนตารางผู้ใช้:

function add_course_section_filter() {
    echo '<select name="course_section" style="float:none;">';
    echo '<option value="">Course Section...</option>';
    for ( $i = 1; $i <= 3; ++$i ) {
        if ( $i == $_GET[ 'course_section' ] ) {
            echo '<option value="'.$i.'" selected="selected">Section '.$i.'</option>';
        } else {
            echo '<option value="'.$i.'">Section '.$i.'</option>';
        }
    }
    echo '<input id="post-query-submit" type="submit" class="button" value="Filter" name="">';
}
add_action( 'restrict_manage_users', 'add_course_section_filter' );

ฟังก์ชั่นนี้จะเปลี่ยนแบบสอบถามผู้ใช้เพื่อเพิ่มของฉันmeta_query:

function filter_users_by_course_section( $query ) {
    global $pagenow;

    if ( is_admin() && 
         'users.php' == $pagenow && 
         isset( $_GET[ 'course_section' ] ) && 
         !empty( $_GET[ 'course_section' ] ) 
       ) {
        $section = $_GET[ 'course_section' ];
        $meta_query = array(
            array(
                'key'   => 'course_section',
                'value' => $section
            )
        );
        $query->set( 'meta_key', 'course_section' );
        $query->set( 'meta_query', $meta_query );
    }
}
add_filter( 'pre_get_users', 'filter_users_by_course_section' );

ข้อมูลอื่น ๆ

มันสร้างดร็อปดาวน์ของฉันอย่างถูกต้อง เมื่อฉันเลือกส่วนของหลักสูตรและคลิกFilterที่หน้าจะรีเฟรชและcourse_sectionแสดงใน URL แต่ไม่มีค่าที่เกี่ยวข้อง หากฉันตรวจสอบคำขอ HTTP แสดงว่าได้รับการส่งด้วยค่าตัวแปรที่ถูกต้อง แต่ก็มีสิ่ง302 Redirectที่ดูเหมือนว่าจะตัดค่าที่ฉันเลือก

หากฉันส่งcourse_sectionตัวแปรโดยพิมพ์ลงใน URL โดยตรงตัวกรองจะทำงานตามที่คาดไว้

รหัสของฉันอยู่บนพื้นฐานของรหัสนี้จาก Dave Courtอย่างคร่าว ๆ

ฉันได้ลองใช้รายการที่อนุญาตพิเศษของฉันโดยใช้รหัสนี้ แต่ก็ไม่มีโชค:

function add_course_section_query_var( $qvars ) {
    $qvars[] = 'course_section';
    return $qvars;
}
add_filter( 'query_vars', 'add_course_section_query_var' );

ฉันใช้ WP 4.4 ความคิดใดที่ว่าทำไมตัวกรองของฉันไม่ทำงาน


FYI ฉันเพิ่มตั๋วในเว็บไซต์ WP Tracที่จะป้องกันไม่ให้นักพัฒนาต้องข้ามผ่านห่วงใด ๆ ที่อธิบายไว้ด้านล่าง
morphatic

คำตอบ:


6

อัพเดท 2018-06-28

แม้ว่าโค้ดด้านล่างจะใช้งานได้ดี แต่นี่คือการเขียนโค้ดสำหรับ WP> = 4.6.0 (โดยใช้ PHP 7):

function add_course_section_filter( $which ) {

    // create sprintf templates for <select> and <option>s
    $st = '<select name="course_section_%s" style="float:none;"><option value="">%s</option>%s</select>';
    $ot = '<option value="%s" %s>Section %s</option>';

    // determine which filter button was clicked, if any and set section
    $button = key( array_filter( $_GET, function($v) { return __( 'Filter' ) === $v; } ) );
    $section = $_GET[ 'course_section_' . $button ] ?? -1;

    // generate <option> and <select> code
    $options = implode( '', array_map( function($i) use ( $ot, $section ) {
        return sprintf( $ot, $i, selected( $i, $section, false ), $i );
    }, range( 1, 3 ) ));
    $select = sprintf( $st, $which, __( 'Course Section...' ), $options );

    // output <select> and submit button
    echo $select;
    submit_button(__( 'Filter' ), null, $which, false);
}
add_action('restrict_manage_users', 'add_course_section_filter');

function filter_users_by_course_section($query)
{
    global $pagenow;
    if (is_admin() && 'users.php' == $pagenow) {
        $button = key( array_filter( $_GET, function($v) { return __( 'Filter' ) === $v; } ) );
        if ($section = $_GET[ 'course_section_' . $button ]) {
            $meta_query = [['key' => 'courses','value' => $section, 'compare' => 'LIKE']];
            $query->set('meta_key', 'courses');
            $query->set('meta_query', $meta_query);
        }
    }
}
add_filter('pre_get_users', 'filter_users_by_course_section');

ฉันได้รวบรวมแนวคิดหลายอย่างจาก @birgire และ @cale_b ซึ่งเสนอวิธีแก้ปัญหาด้านล่างที่น่าอ่าน โดยเฉพาะฉัน:

  1. ใช้$whichตัวแปรที่ถูกเพิ่มเข้ามาv4.6.0
  2. ใช้แนวปฏิบัติที่ดีที่สุดสำหรับ i18n โดยใช้สตริงที่สามารถแปลได้เช่น __( 'Filter' )
  3. แลกเปลี่ยนลูปสำหรับ (ทันสมัยมากขึ้น?) array_map(), array_filter()และrange()
  4. ใช้sprintf()สำหรับสร้างเทมเพลตมาร์กอัป
  5. ใช้สัญกรณ์อาร์เรย์วงเล็บเหลี่ยมแทน array()

สุดท้ายฉันค้นพบข้อผิดพลาดในโซลูชันก่อนหน้าของฉัน การแก้ปัญหาผู้ที่เคยโปรดปรานท็อปกว่าด้านล่าง<select> <select>ดังนั้นหากคุณเลือกตัวเลือกตัวกรองจากดรอปดาวน์ด้านบนจากนั้นเลือกตัวเลือกจากดรอปดาวน์ด้านล่างตัวกรองจะยังคงใช้ค่าใดก็ตามที่อยู่ด้านบนสุดเท่านั้น (หากไม่ว่าง) เวอร์ชั่นใหม่นี้แก้ไขข้อผิดพลาดนั้น

อัพเดท 2018-02-14

นี้ปัญหาได้รับการ patched ตั้งแต่ WP 4.6.0และมีการเปลี่ยนแปลงการบันทึกไว้ในเอกสารอย่างเป็นทางการ วิธีการแก้ปัญหาด้านล่างยังคงใช้งานได้

สิ่งที่ทำให้เกิดปัญหา (WP <4.6.0)

ปัญหาคือการrestrict_manage_usersกระทำถูกเรียกสองครั้ง: เหนือตารางผู้ใช้และอีกครั้ง ซึ่งหมายความว่าทั้งสองselectเมนูแบบเลื่อนลงได้รับการสร้างขึ้นด้วยชื่อเดียวกัน เมื่อFilterคลิกที่ปุ่มค่าใดก็ตามที่อยู่ในselectองค์ประกอบที่สอง(เช่นหนึ่งในตารางด้านล่าง) จะแทนที่ค่าในรายการแรกเช่นที่อยู่เหนือตาราง

ในกรณีที่คุณต้องการดำดิ่งลงสู่แหล่ง WP การrestrict_manage_usersดำเนินการจะถูกทริกเกอร์จากภายในWP_Users_List_Table::extra_tablenav($which)ซึ่งเป็นฟังก์ชันที่สร้างดรอปดาวน์ดั้งเดิมเพื่อเปลี่ยนบทบาทของผู้ใช้ ฟังก์ชั่นนั้นมีความช่วยเหลือของ$whichตัวแปรที่บอกว่ามันกำลังสร้างselectรูปแบบด้านบนหรือด้านล่างและช่วยให้มันมีnameคุณสมบัติที่แตกต่างกันสองแบบ น่าเสียดายที่$whichตัวแปรไม่ได้ถูกส่งผ่านไปยังการrestrict_manage_usersกระทำดังนั้นเราจึงต้องหาวิธีอื่นเพื่อแยกความแตกต่างขององค์ประกอบที่กำหนดเองของเรา

วิธีหนึ่งในการทำเช่นนี้ตามที่@Linnea แนะนำคือการเพิ่ม JavaScript เพื่อจับการFilterคลิกและซิงค์ค่าของสองดรอปดาวน์ ฉันเลือกโซลูชัน PHP เท่านั้นที่ฉันจะอธิบายตอนนี้

วิธีแก้ไข

คุณสามารถใช้ประโยชน์จากความสามารถในการเปลี่ยนอินพุต HTML เป็นอาร์เรย์ของค่าจากนั้นกรองอาร์เรย์เพื่อกำจัดค่าที่ไม่ได้กำหนด นี่คือรหัส:

    function add_course_section_filter() {
        if ( isset( $_GET[ 'course_section' ]) ) {
            $section = $_GET[ 'course_section' ];
            $section = !empty( $section[ 0 ] ) ? $section[ 0 ] : $section[ 1 ];
        } else {
            $section = -1;
        }
        echo ' <select name="course_section[]" style="float:none;"><option value="">Course Section...</option>';
        for ( $i = 1; $i <= 3; ++$i ) {
            $selected = $i == $section ? ' selected="selected"' : '';
            echo '<option value="' . $i . '"' . $selected . '>Section ' . $i . '</option>';
        }
        echo '</select>';
        echo '<input type="submit" class="button" value="Filter">';
    }
    add_action( 'restrict_manage_users', 'add_course_section_filter' );

    function filter_users_by_course_section( $query ) {
        global $pagenow;

        if ( is_admin() && 
             'users.php' == $pagenow && 
             isset( $_GET[ 'course_section' ] ) && 
             is_array( $_GET[ 'course_section' ] )
            ) {
            $section = $_GET[ 'course_section' ];
            $section = !empty( $section[ 0 ] ) ? $section[ 0 ] : $section[ 1 ];
            $meta_query = array(
                array(
                    'key' => 'course_section',
                    'value' => $section
                )
            );
            $query->set( 'meta_key', 'course_section' );
            $query->set( 'meta_query', $meta_query );
        }
    }
    add_filter( 'pre_get_users', 'filter_users_by_course_section' );

โบนัส: PHP 7 Refactor

เนื่องจากฉันรู้สึกตื่นเต้นเกี่ยวกับ PHP 7 ในกรณีที่คุณใช้ WP บนเซิร์ฟเวอร์ PHP 7 ต่อไปนี้เป็นเวอร์ชันที่สั้นกว่าและเซ็กซี่กว่าโดยใช้ตัวดำเนินการรวม??ศูนย์เป็นโมฆะ :

function add_course_section_filter() {
    $section = $_GET[ 'course_section' ][ 0 ] ?? $_GET[ 'course_section' ][ 1 ] ?? -1;
    echo ' <select name="course_section[]" style="float:none;"><option value="">Course Section...</option>';
    for ( $i = 1; $i <= 3; ++$i ) {
        $selected = $i == $section ? ' selected="selected"' : '';
        echo '<option value="' . $i . '"' . $selected . '>Section ' . $i . '</option>';
    }
    echo '</select>';
    echo '<input type="submit" class="button" value="Filter">';
}
add_action( 'restrict_manage_users', 'add_course_section_filter' );

function filter_users_by_course_section( $query ) {
    global $pagenow;

    if ( is_admin() && 'users.php' == $pagenow) {
        $section = $_GET[ 'course_section' ][ 0 ] ?? $_GET[ 'course_section' ][ 1 ] ?? null;
        if ( null !== $section ) {
            $meta_query = array(
                array(
                    'key' => 'course_section',
                    'value' => $section
                )
            );
            $query->set( 'meta_key', 'course_section' );
            $query->set( 'meta_query', $meta_query );
        }
    }
}
add_filter( 'pre_get_users', 'filter_users_by_course_section' );

สนุก!


ดังนั้นวิธีการแก้ปัญหาของคุณยังคงทำงานหลังจาก 4.6.0? มีวิธีที่ง่ายกว่าในการทำเวิร์ดเพรสรุ่นใหม่ล่าสุดหรือไม่? ฉันไม่สามารถหาไกด์ที่ทำเช่นนี้ได้ในปีนี้
Jeremy Muckel

1
@JeremyMuckel คำตอบสั้น ๆ สำหรับคำถามของคุณคือ "ใช่" โซลูชันเก่าของฉันยังใช้งานได้ ฉันใช้มันเพื่อการผลิตอย่างสม่ำเสมอเป็นเวลาหลายเดือนแล้วและเว็บไซต์ส่วนใหญ่ของฉันได้รับการปรับปรุงเป็นรุ่น WP ที่เสถียรล่าสุด (ปัจจุบัน 4.9.6) ดังที่ได้กล่าวไปแล้วว่าฉันได้มอบโซลูชันที่อัปเดตซึ่งใช้แพตช์ใหม่และยังแก้ไขข้อบกพร่องเล็กน้อยในโซลูชันก่อนหน้านี้ของฉัน
สัณฐาน

สิ่งนี้มีประโยชน์ แต่รหัสแบบฟอร์มของคุณภายใต้ "วิธีการแก้ไข" และ "โบนัส: PHP 7 Refactor" หายไป</select>ฉันยังพบว่าได้รับการทำงานฉันต้องใส่<form method="get">ก่อนเมนูเลือกและ</form>ปุ่มตัวกรองหลัง
cogdog

@cogdog จับ</select>แท็กที่หายไปได้ดี! ฉันเพิ่มพวกเขา แปลกที่คุณจำเป็นต้องห่อไว้ใน<form>เนื่องจากทั้งหน้านี้ถูกห่อในรูปแบบขนาดใหญ่และรหัสนี้จะถูกแทรกลงไปตรงกลาง ดีใจที่คุณทำงานได้ :)
morphatic

4

ในแกนกลางชื่ออินพุตด้านล่างจะถูกทำเครื่องหมายด้วยหมายเลขอินสแตนซ์เช่นnew_role(บน) และnew_role2(ล่าง) นี่คือสองวิธีสำหรับการตั้งชื่อที่คล้ายกันคือcourse_section1(บน) และcourse_section2(ล่าง):

วิธีการ # 1

เนื่องจาก$whichตัวแปร ( บนสุด , ล่าง ) ไม่ได้ถูกส่งผ่านไปยังrestrict_manage_usershook เราจึงสามารถแก้ไขได้โดยการสร้าง hook ของเวอร์ชั่นนั้นเอง:

มาสร้าง action hook wpse_restrict_manage_usersที่มีการเข้าถึง$whichตัวแปร:

add_action( 'restrict_manage_users', function() 
{
    static $instance = 0;   
    do_action( 'wpse_restrict_manage_users', 1 === ++$instance ? 'top' : 'bottom'  );

} );

จากนั้นเราสามารถขอ:

add_action( 'wpse_restrict_manage_users', function( $which )
{
    $name = 'top' === $which ? 'course_section1' : 'course_section2';

    // your stuff here
} );

ซึ่งตอนนี้เรามี$nameเป็นcourse_section1ที่ด้านบนและcourse_section2ที่ด้านล่าง

วิธีการ # 2

มาเชื่อมโยงrestrict_manage_usersกันเพื่อแสดงดรอปดาวน์ด้วยชื่อที่แตกต่างกันสำหรับแต่ละอินสแตนซ์:

function add_course_section_filter() 
{
    static $instance= 0;    

    // Dropdown options         
    $options = '';
    foreach( range( 1, 3 ) as $rng )
    {
        $options = sprintf( 
            '<option value="%1$d" %2$s>Section %1$d</option>',
            $rng,
            selected( $rng, get_selected_course_section(), 0 )
        );
    }

    // Display dropdown with a different name for each instance
    printf( 
        '<select name="%s" style="float:none;"><option value="0">%s</option>%s</select>', 
        'course_section' . ++$instance,
        __( 'Course Section...' ),
        $options 
    );


    // Button
    printf (
        '<input id="post-query-submit" type="submit" class="button" value="%s" name="">',
        __( 'Filter' )
    );
}
add_action( 'restrict_manage_users', 'add_course_section_filter' );

ที่เราใช้ฟังก์ชั่นหลักselected()และฟังก์ชั่นผู้ช่วย:

/**
 * Get the selected course section 
 * @return int $course_section
 */
function get_selected_course_section()
{
    foreach( range( 1, 2) as $rng )
        $course_section = ! empty( $_GET[ 'course_section' . $rng ] )
            ? $_GET[ 'course_section' . $rng ]
            : -1; // default

    return (int) $course_section;
}

จากนั้นเราสามารถใช้สิ่งนี้เมื่อเราตรวจสอบส่วนของหลักสูตรที่เลือกในpre_get_usersการเรียกกลับการดำเนินการ


นี่เป็นวิธีการที่น่าสนใจ ฉันไม่เคยใช้staticคำสำคัญในลักษณะนี้ (ภายในชั้นเรียนเท่านั้น) ไม่$instanceกลายเป็นตัวแปรทั่วโลกเมื่อคุณทำเช่นนี้? คุณต้องกังวลเกี่ยวกับการชนกันของชื่อตัวแปรหรือไม่? ฉันยังชอบเทคนิคในการสร้างแอ็คชั่นใหม่ที่ลูกหมูจะใช้กับสิ่งที่มีอยู่ ขอบคุณ!
morphatic

วิธีนี้มีประโยชน์ในบางครั้งและใช้ในแกนหลักเช่นอินสแตนซ์นับจำนวนรหัสย่อ (แกลเลอรี่, รายการเล่น, เสียง) ขอบเขตตัวแปรคงที่ที่นี่จะไม่ยุ่งกับขอบเขตตัวแปรทั่วโลก ค่าของตัวแปรสแตติกจะถูกเก็บไว้ระหว่างการเรียกใช้ฟังก์ชันเหล่านั้นซึ่งไม่ใช่กรณีที่มีตัวแปรโลคอล ฉันค้นหาและพบบทช่วยสอนที่ดีซึ่งมีรายละเอียดเพิ่มเติม @morphatic
birgire

4

ฉันทดสอบโค้ดของคุณทั้ง Wordpress 4.4 และ Wordpress 4.3.1 ด้วยเวอร์ชัน 4.4 ฉันพบปัญหาเดียวกันกับคุณ อย่างไรก็ตามรหัสของคุณทำงานอย่างถูกต้องในเวอร์ชัน 4.3.1!

ฉันคิดว่านี่เป็นข้อผิดพลาดของ Wordpress ฉันไม่รู้ว่ามีการรายงานหรือยัง ฉันคิดว่าเหตุผลที่อยู่เบื้องหลังข้อผิดพลาดอาจเป็นได้ว่าปุ่มส่งกำลังส่งแบบสอบถามจำนวนสองครั้ง หากคุณดูที่คิวรีแบบสอบถามคุณจะเห็นว่าหลักสูตรมีการระบุไว้สองครั้งครั้งหนึ่งด้วยค่าที่ถูกต้องและว่างเปล่าครั้งเดียว

แก้ไข: นี่คือโซลูชัน JavaScript

เพียงเพิ่มสิ่งนี้ลงในไฟล์ function.php ของธีมของคุณและเปลี่ยน NAME_OF_YOUR_INPUT_FIELD เป็นชื่อของฟิลด์อินพุตของคุณ! เนื่องจาก WordPress โหลด jQuery โดยอัตโนมัติในด้านผู้ดูแลระบบคุณจึงไม่ต้องจัดคิวสคริปต์ใด ๆ ตัวอย่างรหัสนี้เพียงเพิ่มตัวฟังการเปลี่ยนแปลงในอินพุตแบบเลื่อนลงจากนั้นอัปเดตแบบเลื่อนลงอื่น ๆ เพื่อจับคู่กับค่าเดียวกันโดยอัตโนมัติ คำอธิบายเพิ่มเติมที่นี่

add_action( 'in_admin_footer', function() {
?>
<script type="text/javascript">
    var el = jQuery("[name='NAME_OF_YOUR_INPUT_FIELD']");
    el.change(function() {
        el.val(jQuery(this).val());
    });
</script>
<?php
} );

หวังว่านี่จะช่วยได้!


ขอบคุณ Linnea ใช่ฉันพบสิ่งเดียวกันว่าเมื่อคุณคลิกFilterจะส่งค่าที่ถูกต้อง แต่จากนั้นจะเปลี่ยนเส้นทางกลับไปที่หน้าเว็บอีกครั้งคราวนี้ทำให้เกิดค่า ฉันเดาว่ามันเป็นคุณสมบัติ "ความปลอดภัย" เพื่อป้องกันการสุ่มส่งค่าที่อาจเป็นอันตรายที่เป็นอันตราย แต่ฉันไม่ทราบวิธีการแก้ไข ถอนหายใจ
morphatic

OH! ฉันหาสาเหตุที่ var ปรากฎขึ้นสองครั้ง เนื่องจากมีการดรอปดาวน์ทั้งข้างบนและด้านล่างตารางผู้ใช้และทั้งคู่มีnameคุณลักษณะเดียวกัน หากฉันใช้เมนูแบบเลื่อนลงด้านล่างตารางเพื่อทำการกรองจะทำงานได้ตามที่คาดไว้ เนื่องจากฟิลด์นั้นมาหลังเขตข้อมูลข้างบนมันจึงมีค่า Null แทนที่ฟิลด์ก่อนหน้า อืม ....
สัณฐาน

หาดี! ฉันพยายามที่จะหาจุดที่ซ้ำกันมา ฉันคิดว่า JavaScript อาจแก้ไขปัญหานี้ได้ ให้ตั้งค่าอื่น ๆ แบบหล่นลงเป็นค่าเดียวกันก่อนที่จะส่งแบบฟอร์ม
Linnea Huxford

1

นี่เป็นโซลูชัน Javascript อื่นที่อาจเป็นประโยชน์สำหรับบางคน ในกรณีของฉันฉันเพิ่งลบรายการที่เลือก 2 (ด้านล่าง) ทั้งหมด ฉันพบว่าฉันไม่เคยใช้อินพุตด้านล่างอยู่ดี ...

add_action( 'in_admin_footer', function() {
    ?>
    <script type="text/javascript">
        jQuery(".tablenav.bottom select[name='course_section']").remove();
        jQuery(".tablenav.bottom input#post-query-submit").remove();
    </script>
    <?php
} );

1

โซลูชันที่ไม่ใช่ JavaScript

ให้เลือกชื่อที่เป็น "อาเรย์สไตล์" เช่น:

echo '<select name="course_section[]" style="float:none;">';

จากนั้นพารามิเตอร์ทั้งสองจะถูกส่งผ่าน (จากด้านบนและ botom ของตาราง) และตอนนี้อยู่ในรูปแบบอาร์เรย์ที่รู้จัก

จากนั้นค่าสามารถใช้เช่นนี้ในpre_get_usersฟังก์ชั่น:

function filter_users_by_course_section( $query ) {
    global $pagenow;

    // if not on users page in admin, get out
    if ( ! is_admin() || 'users.php' != $pagenow ) {
        return;
    } 

    // if no section selected, get out
    if ( empty( $_GET['course_section'] ) ) {
        return;
    }

    // course_section is known to be set now, so load it
    $section = $_GET['course_section'];

    // the value is an array, and one of the two select boxes was likely
    // not set to anything, so use array_filter to eliminate empty elements
    $section = array_filter( $section );

    // the value is still an array, so get the first value
    $section = reset( $section );

    // now the value is a single value, such as 1
    $meta_query = array(
        array(
            'key' => 'course_section',
            'value' => $section
        )
    );

    $query->set( 'meta_key', 'course_section' );
    $query->set( 'meta_query', $meta_query );
}

0

ทางออกอื่น

คุณสามารถใส่กล่องตัวกรองของคุณในไฟล์แยกต่างหากเช่น user_list_filter.php

และใช้require_once 'user_list_filter.php'ในฟังก์ชั่นการโทรกลับการกระทำของคุณ

user_list_filter.php ไฟล์:

<select name="course_section" style="float:none;">
    <option value="">Course Section...</option>
    <?php for ( $i = 1; $i <= 3; ++$i ) {
        if ( $i == $_GET[ 'course_section' ] ) { ?>
        <option value="<?=$i?>" selected="selected">Section <?=$i?></option>
        <?php } else { ?>
        <option value="<?=$i?>">Section <?=$i?></option>
        <?php }
     }?>
</select>
<input id="post-query-submit" type="submit" class="button" value="Filter" name="">

และในการดำเนินการติดต่อกลับของคุณ:

function add_course_section_filter() {
    require_once 'user_list_filter.php';
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.