কাস্টম মেটা ক্ষেত্র দ্বারা অ্যাডমিন ব্যবহারকারীদের পৃষ্ঠায় ব্যবহারকারীদের কীভাবে ফিল্টার করবেন?


9

সমস্যাটি

ডাব্লুপি ব্যবহারকারীদের তালিকাকে ফিল্টার করতে ব্যবহার করার আগে আমার ক্যোয়ারী ভেরিয়েবলের মান মুছে ফেলবে।

আমার কোড

এই ফাংশনটি এতে আমার ব্যবহারকারীদের টেবিলে একটি কাস্টম কলাম যুক্ত করে /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' );

এই ফাংশনটি ডব্লিউপিকে কীভাবে কলামে মান পূরণ করতে পারে তা বলে:

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ইউআরএলে প্রদর্শিত হয় তবে এর সাথে এর কোনও মূল্য নেই। যদি আমি এইচটিটিপি অনুরোধগুলি যাচাই করি তবে এটি দেখায় যে এটি সঠিক ভেরিয়েবল মান সহ জমা দেওয়া হয়েছে, তবে তারপরে এমন একটি আছে 302 Redirectযা আমি নির্বাচিত মানটি ছাঁটাই করে মনে করি।

আমি যদি course_sectionভেরিয়েবলটি সরাসরি ইউআরএলে টাইপ করে জমা করি তবে ফিল্টারটি প্রত্যাশা অনুযায়ী কাজ করে।

আমার কোডটি ডেভ কোর্টের এই কোডের উপর ভিত্তি করে ।

আমি এই কোডটি ব্যবহার করে আমার ক্যোয়ারী বর্ণটি হোয়াইটলিস্ট করার চেষ্টা করেছি, তবে কোনও ভাগ্য ছাড়াই:

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

আমি ডাব্লুপি ৪.৪ ব্যবহার করছি। আমার ফিল্টার কাজ করছে না এমন কোনও ধারণা?


এফওয়াইআই, আমি ডাব্লুপি ট্র্যাক সাইটে একটি টিকিট যুক্ত করেছি যা বিকাশকারীদের নীচে বর্ণিত কোনও হুপের মধ্য দিয়ে ঝাঁপিয়ে পড়তে বাধা দেবে।
মরফ্যাটিক

উত্তর:


6

আপডেট 2018-06-28

নীচের কোডটি বেশিরভাগ ক্ষেত্রে সূক্ষ্মভাবে কাজ করে, এখানে ডাব্লুপি> = 4.6.0 (পিএইচপি 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');

আমি @ বিবারগায়ার এবং @ ক্যাল_বি থেকে বেশ কয়েকটি ধারণাগুলি একত্রিত করেছি যারা নীচে এমন সমাধানও দেয় যা পড়ার মতো। বিশেষত, আমি:

  1. $whichযোগ করা চলকটি ব্যবহার করুনv4.6.0
  2. অনুবাদযোগ্য স্ট্রিং ব্যবহার করে আই 18 এন এর জন্য সেরা অনুশীলন ব্যবহার করুন, যেমন __( 'Filter' )
  3. জন্য বিনিময় লুপ (আরও ফ্যাশনেবল?) array_map(), array_filter()এবংrange()
  4. sprintf()মার্কআপ টেমপ্লেট উত্পাদন করার জন্য ব্যবহৃত হয়
  5. এর পরিবর্তে বর্গাকার বন্ধনী অ্যারে সংকেত ব্যবহার করুন array()

শেষ অবধি, আমি আমার আগের সমাধানগুলিতে একটি বাগ আবিষ্কার করেছি। সেই সমাধান সর্বদা শীর্ষে পক্ষপাতী <select>থেকে BOTTOM উপর <select>। সুতরাং আপনি যদি শীর্ষস্থানীয় ড্রপডাউন থেকে একটি ফিল্টার বিকল্প নির্বাচন করেন এবং তারপরে নীচের ড্রপডাউন থেকে একটি নির্বাচন করেন তবে ফিল্টারটি কেবলমাত্র যেটি মান শীর্ষে থাকবে তা ব্যবহার করবে (যদি এটি ফাঁকা না থাকে)। এই নতুন সংস্করণটি বাগটি সংশোধন করে।

আপডেট 2018-02-14

এই সমস্যাটি ডাব্লুপিপি 4.6.0 থেকে প্যাচ করা হয়েছে এবং পরিবর্তনগুলি সরকারী ডক্সে নথিভুক্ত করা হয়েছে । যদিও নীচের সমাধানটি এখনও কাজ করে।

সমস্যাটির কারণ কী হয়েছে (ডাব্লুপিপি <4.6.0)

সমস্যাটি ছিল যে restrict_manage_usersক্রিয়াটি দু'বার কল হয়ে: একবার ব্যবহারকারীদের টেবিলের উপরে, এবং একবার এটি নীচে। এর অর্থ হ'ল একই নামে টিডব্লিউও selectড্রপডাউনগুলি তৈরি হয় । যখন বাটনে ক্লিক না যাই হোক না কেন মান দ্বিতীয় হয় উপাদান (যেমন টেবিল নিচের) প্রথম এক মান অগ্রাহ্য, অর্থাত্ সারণীর উপরে এক।Filterselect

আপনি যদি ডাব্লুপি উত্সটিতে ডুবতে চান তবে restrict_manage_usersঅ্যাকশনটি ভিতর থেকে শুরু হয় WP_Users_List_Table::extra_tablenav($which), এটি এমন একটি ফাংশন যা ব্যবহারকারীর ভূমিকা পরিবর্তন করতে নেটিভ ড্রপডাউন তৈরি করে। এই ফাংশনে $whichভেরিয়েবলের সহায়তা রয়েছে যা selectএটি ফর্মের উপরের বা নীচে তৈরি করছে কিনা তা জানিয়ে দেয় এবং এটি দুটি ড্রপডাউনগুলিকে বিভিন্ন nameবৈশিষ্ট্য দেওয়ার অনুমতি দেয় । দুর্ভাগ্যক্রমে, $whichভেরিয়েবলটি restrict_manage_usersঅ্যাকশনটিতে পাস হয় না , সুতরাং আমাদের নিজস্ব কাস্টম উপাদানগুলিকে আলাদা করার জন্য আমাদের আরও একটি উপায় নিয়ে আসতে হবে।

@ লিনিয়ার পরামর্শ অনুসারে এটি করার একটি উপায় হ'ল ক্লিকটি ধরার জন্য কিছু জাভাস্ক্রিপ্ট যুক্ত করা Filterএবং দুটি ড্রপডাউনের মানগুলি সিঙ্ক করতে হবে। আমি একটি পিএইচপি-কেবল সমাধানটি বেছে নিয়েছি যা আমি এখনই বর্ণনা করব।

কিভাবে এটা মেরামত করা যেতে পারে

এইচটিএমএল ইনপুটগুলিকে মানগুলির অ্যারে রূপান্তরিত করার সক্ষমতাটি আপনি নিতে পারেন এবং তারপরে যেকোন অপরিজ্ঞাত মান থেকে পরিত্রাণ পেতে অ্যারে ফিল্টার করতে পারেন। কোডটি এখানে:

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

বোনাস: পিএইচপি 7 রিফ্যাক্টর

যেহেতু আমি পিএইচপি 7 সম্পর্কে উত্তেজিত, আপনি যদি পিএইচপি 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 এর পরেও কাজ করে? ওয়ার্ডপ্রেসের নতুনতম সংস্করণটি দিয়ে কি এর থেকে সহজতর উপায় আছে? আমি এই বছরের মতো কোনও গাইড খুঁজে পাচ্ছি না
জেরেমি মুকেল

1
@ জেরেমিমুকেল আপনার প্রশ্নের সংক্ষিপ্ত উত্তর "হ্যাঁ"। আমার পুরানো সমাধান এখনও কাজ করে। আমি এখন কয়েক মাস ধরে এটি উত্পাদনে নিয়মিত ব্যবহার করছি এবং আমার বেশিরভাগ সাইটগুলি সর্বশেষতম স্থিতিশীল ডাব্লুপি সংস্করণে (বর্তমানে 4.9.6) আপডেট হয়েছে। বলা হচ্ছে, আমি একটি আপডেট সমাধান সরবরাহ করেছি যা নতুন প্যাচ ব্যবহার করে এবং এটি আমার আগের সমাধানটিতে একটি সূক্ষ্ম বাগও সংশোধন করে।
মরফ্যাটিক

এটি সহায়ক ছিল তবে "কীভাবে এটি ঠিক করতে হবে" এবং "বোনাস: পিএইচপি 7 রিফ্যাক্টর" এর অধীনে আপনার ফর্ম কোডটি অনুপস্থিত রয়েছে </select>তা আমি কাজ করতে পেতেও খুঁজে পেয়েছি আমাকে <form method="get">নির্বাচিত মেনুতে এবং </form>ফিল্টার বোতামের পরে রেখে যেতে হয়েছিল।
cogdog

নিখোঁজ </select>ট্যাগগুলিতে @ কোগডোগের ভাল ক্যাচ ! আমি তাদের যোগ। আশ্চর্যের বিষয় যে আপনার এটি <form>পুরোপুরি একটি বড় আকারে মোড়ানো রয়েছে এবং এই কোডটি এর মাঝখানে ইনজেকশনের হয়ে গেছে rap যদিও আপনি এটি কাজ করে খুশি। :)
মরফ্যাটিক

4

মূলটিতে নীচের ইনপুট নামগুলি উদাহরণ নম্বর দিয়ে চিহ্নিত করা হয়, যেমন new_role(শীর্ষ) এবং new_role2(নীচে)। অনুরূপ নামকরণের কনভেনশনের জন্য এখানে দুটি পদ্ধতির নাম দেওয়া হয়েছে course_section1( যথা: শীর্ষ) এবং course_section2(নীচে):

পন্থা # 1

যেহেতু $whichভেরিয়েবল ( শীর্ষ , নীচে ) restrict_manage_usersহুকটিতে পাস হয় না , তাই আমরা সেই হুকটির নিজস্ব সংস্করণ তৈরি করে এটি পেতে পারি:

আসুন অ্যাকশন হুক তৈরি করুন 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একটি বিশ্বব্যাপী পরিবর্তনশীল হয়ে যখন আপনি এই না? পরিবর্তনশীল নামের সংঘর্ষের বিষয়ে আপনার কি চিন্তা করতে হবে? আমি একটি নতুন ক্রিয়া তৈরির কৌশলটিও পছন্দ করি যা পিগি কোনও বিদ্যমানটির পিছনে থাকে। ধন্যবাদ!
মরফ্যাটিক

এই পদ্ধতির কখনও কখনও সুবিধাজনক হতে পারে এবং উদাহরণ হিসাবে শর্টকোড (গ্যালারী, প্লেলিস্ট, অডিও) উদাহরণ গণনা করতে ব্যবহৃত হয়। এখানে স্ট্যাটিক ভেরিয়েবল স্কোপ গ্লোবাল ভেরিয়েবল স্কোপ নিয়ে গণ্ডগোল করবে না। স্ট্যাটিক ভেরিয়েবলের মান সেই ফাংশন কলগুলির মধ্যে সংরক্ষণ করা হবে, যা স্থানীয় ভেরিয়েবলের ক্ষেত্রে নয়। আমি অনুসন্ধান করেছি এবং এই সুন্দর টিউটোরিয়ালটি পেয়েছি যাতে আরও বিশদ রয়েছে। @ এমরফ্যাটিক
বার্জায়ার 4'16

4

আমি আপনার কোডটি ওয়ার্ডপ্রেস ৪.৪ এবং ওয়ার্ডপ্রেস ৪.৩.১ এ পরীক্ষা করেছি। সংস্করণ ৪.৪ সহ, আমি আপনার মতো একই সমস্যাটির মুখোমুখি। তবে আপনার কোডটি 4.3.1 সংস্করণে সঠিকভাবে কাজ করে!

আমি মনে করি এটি একটি ওয়ার্ডপ্রেস বাগ। এটি এখনও রিপোর্ট করা হয়েছে কিনা আমি জানি না। আমি মনে করি বাগের পিছনের কারণটি হ'ল সাবমিট বাটনটি কোয়েরি বার দুটি বার প্রেরণ করছে। আপনি যদি ক্যোয়ারী ভার্সের দিকে নজর দেন, আপনি দেখতে পাবেন যে কোর্স_সেকশনটি দুবার তালিকাভুক্ত হয়েছে, একবার সঠিক মান এবং একবার খালি রয়েছে।

সম্পাদনা: এটি জাভাস্ক্রিপ্ট সমাধান olution

এটি কেবল আপনার থিমের ফাংশন.এইচপিপি ফাইলের সাথে যুক্ত করুন এবং আপনার ইনপুট ক্ষেত্রের নামে NAME_OF_YOUR_INPUT_FIELD পরিবর্তন করুন! যেহেতু ওয়ার্ডপ্রেস স্বয়ংক্রিয়ভাবে অ্যাডমিনের দিকে 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
} );

আশাকরি এটা সাহায্য করবে!


ধন্যবাদ লিনিয়া হ্যাঁ, আমি একই জিনিসটি পেয়েছি, আপনি যখন Filterএটি ক্লিক করেন তখন সঠিক মান জমা দেয় তবে তারপরে আবার পৃষ্ঠাটিতে পুনঃনির্দেশ করে, এবার মানটি বাদ দিয়ে। আমার অনুমান যে এলোমেলো, সম্ভাব্য দূষিত, মানগুলি জমা দেওয়া থেকে রক্ষা করতে এটি এক ধরণের সুরক্ষা "বৈশিষ্ট্য", তবে এটি কীভাবে কাজ করবেন তা আমি জানি না। দীর্ঘশ্বাস.
মরফ্যাটিক

উহু! আমি বুঝতে পেরেছি কেন বার দুটি বার প্রদর্শিত হয়। কারণ ব্যবহারকারীদের টেবিলের উপরে এবং নীচে উভয়ই একটি ড্রপডাউন রয়েছে এবং তাদের উভয়েরই একই nameবৈশিষ্ট্য রয়েছে। আমি যদি ফিল্টারিং করতে টেবিলের নীচে ড্রপডাউন ব্যবহার করি তবে এটি প্রত্যাশার মতো কাজ করে। যেহেতু ক্ষেত্রটি এটির উপরের অংশের পরে আসে, তাই এটির নাল মানটি পূর্বেরটিটিকে ওভাররাইড করে।
হুম

গুড ফাইন্ড! আমি নকলটি কোথা থেকে আসছিল তা বের করার চেষ্টা করছিলাম। আমি মনে করি সম্ভবত কিছুটা জাভাস্ক্রিপ্ট এটি ঠিক করতে পারে। এটি ফর্মটি জমা দেওয়ার আগে অন্য ড্রপটিকে একই মান হিসাবে সেট করুন।
লিনিয়া হাক্সফোর্ড

1

এটি একটি ভিন্ন জাভাস্ক্রিপ্ট সমাধান যা কিছু লোকের পক্ষে সহায়ক হতে পারে। আমার ক্ষেত্রে আমি ২ য় (নীচে) নির্বাচন তালিকাটি পুরোপুরি সরিয়ে ফেলেছি। আমি দেখতে পাচ্ছি যে আমি কখনই নীচের ইনপুটগুলি ব্যবহার করি না ...

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

নন-জাভাস্ক্রিপ্ট সলিউশন

নির্বাচনটিকে এমন একটি নাম দিন যা "অ্যারে-স্টাইল", এর মতো:

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

তারপরে দুটি প্যারামিটারগুলি পাস করা হবে (উপরে থেকে টেবিলের নীচে) এবং এখন একটি পরিচিত অ্যারে ফর্ম্যাটে।

তারপরে, মানটি 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.