2013-12-11 55 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

相关问题