2013-12-11 92 views
3

我在默認用戶列表頁面中顯示一個名爲company name的自定義列。現在我想按該列名稱company name過濾該用戶列表頁面。如何添加我的自定義過濾器(meta_key之一),以使用我的列過濾用戶的默認列表。 請更加清晰的圖像發現 -將自定義過濾器添加到用戶管理員列表

enter image description here

//Code to filter user list by Status 
function admin_users_filter($query){ 
global $pagenow,$wp_query; 

if (is_admin() && $pagenow=='users.php' && isset($_GET['abc']) && $_GET['abc'] != '') { 
    $query->search_term = urldecode($_GET['abc']); 

    global $wpdb; 

    if (!is_null($query->search_term)) { 

     $query = $wpdb->get_results(" SELECT DISTINCT account_status FROM wp_custom_user_details ORDER BY account_status ASC "); 

    }  
} 
} 

add_filter('pre_user_query', 'admin_users_filter'); 


add_action('restrict_manage_users', 'restrict_abc_manage_list'); 
function restrict_abc_manage_list() 
{ 
?> 
<select name="abc" style="float: none;"> 
    <option value=""><?php _e('Filter By Status', 'baapf'); ?></option> 
    <option value="1">Active</option> 
    <option value="2">Inactive</option> 


</select> 
<input id="post-query-submit" class="button" type="submit" value="Filter" name=""> 
<?php 
} 

回答

0

我使用admin_init鉤來加載在管理員添加排序列創建類的功能:)把它塞進的functions.php在你的主題文件中。

if(!function_exists("load_sortable_user_meta_columns")){ 
    add_action('admin_init', 'load_sortable_user_meta_columns'); 
    function load_sortable_user_meta_columns(){ 
     //THIS IS WHERE YOU ADD THE meta_key => display-title values, you can add multiple args, ex: array('company'=>'Company', 'user_registered'=>'Date Registered'); 
     $args = array('company'=>'Company'); 
     new sortable_user_meta_columns($args); 
    } 
} 
if(!class_exists("sortable_user_meta_columns")): 
class sortable_user_meta_columns{ 
    var $defaults = array('nicename', 'email', 'url', 'registered','user_nicename', 'user_email', 'user_url', 'user_registered','display_name','name','post_count','ID','id','user_login'); 
    //By things in user_meta 
    function __construct($args){ 
     $this->args = $args; 
     add_action('pre_user_query', array(&$this, 'query')); 
     add_action('manage_users_custom_column', array(&$this, 'content'), 10, 3); 
     add_filter('manage_users_columns', array(&$this, 'columns')); 
     add_filter('manage_users_sortable_columns', array(&$this, 'sortable')); 
    } 
    function query($query){ 
     $vars = $query->query_vars; 
     if(in_array($vars['orderby'], $this->defaults)) return; 
     $title = $this->args[$vars['orderby']]; 
     if(!empty($title)){ 
       $query->query_from .= " LEFT JOIN bib_usermeta m ON (bib_users.ID = m.user_id AND m.meta_key = '$vars[orderby]')"; 
       $query->query_orderby = "ORDER BY m.meta_value ".$vars['order']; 
     } 
    } 
    function columns($columns) { 
     foreach($this->args as $key=>$value){ 
      $columns[$key] = $value; 
     } 
     return $columns; 
    } 
    function sortable($columns){ 
     foreach($this->args as $key=>$value){ 
      $columns[$key] = $key; 
     } 
     return $columns; 
    } 
    function content($value, $column_name, $user_id) { 
      $user = get_userdata($user_id); //Get the content of the custom meta 
      return $user->$column_name; //Get the custom meta. Eg: Company 
    } 
} 
endif; 

如果你meta_key這個例子將工作是「公司」,如果是「COMPANY_NAME」你必須改變它的$ args。例如:$args = array('company_name' => 'Company Name');

:)

+0

我已經創建了列名稱說company_name但我想要的是創建過濾器,將按公司名稱進行過濾。 – Hina

+0

該類用於排序,您可以複製類並使用自定義參數啓動它,例如:'$ args = array('company_name'=>'Company Name'); new sortable_user_meta_columns($ args);'你需要在'admin_init'時間執行此操作。 – Eek

5

伊克先生已經給出瞭解決方案,在用戶列表中添加自定義列。所以我給如何添加過濾器「公司」選項.the代碼給出

function admin_users_filter($query){ 
global $pagenow,$wp_query; 

if (is_admin() && $pagenow=='users.php' && isset($_GET['abc']) && $_GET['abc'] != '') { 
    $query->search_term = urldecode($_GET['abc']); 

    global $wpdb; 

    if (!is_null($query->search_term)) { 

     $query->query_from .= " INNER JOIN {$wpdb->usermeta} ON " . 
     "{$wpdb->users}.ID={$wpdb->usermeta}.user_id AND " . 
     "{$wpdb->usermeta}.meta_key='meta_key_name_here' AND "."{$wpdb->usermeta}.meta_value LIKE '%{$query->search_term}%'"; 

    }  
} 
} 

add_filter('pre_user_query', 'admin_users_filter'); 


add_action('restrict_manage_users', 'restrict_abc_manage_list'); 
function restrict_abc_manage_list() 
{ 
?> 
<select name="abc" style="float: none;"> 
    <option value=""><?php _e('Filter By College', 'baapf'); ?></option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 

</select> 
<input id="post-query-submit" class="button" type="submit" value="Filter" name=""> 
<?php 
} 

覺得有任何疑問問... thxs

+0

!它工作不正常。 – Hina

+0

這段代碼對我來說工作正常。現在你需要根據你的需要定製與大學相關的價值... thxs –

+0

如果我使用「驗證,不驗證」和所有而不是在選項框中的1,2,3比我無法做過濾。 – Hina

相關問題