creating a table from get_users with sortable column headers

Viewed 23

I created a wordpress shortcode that retrieve all WordPress users with a certain role and returns an HTML table of results. Retrieves a few custom meta fields for the users as well. This is working as desired. I wanted to make the table header columns sortable and/or include a search box against a couple meta fields but haven't been able to get anything to work. I'm new to PHP and most of the examples I found are for retrieving table data via a SQL query vs a WordPress function so I'm a little confused as to what is transferrable to my approach. Seems like I might be passing parameters to an unspecified query function???

// generating orderby and sort url for table header
function sortorder($fieldname){
    $sorturl = "?order_by=".$fieldname."&sort=";
    $sorttype = "asc";
    if(isset($_GET['order_by']) && $_GET['order_by'] == $fieldname){
        if(isset($_GET['sort']) && $_GET['sort'] == "asc"){
            $sorttype = "desc";
        }
    }
    $sorturl .= $sorttype;
    return $sorturl;
}

// function that runs when shortcode is called -- for desktop
function membersX_shortcode() { 

// Create table and header row
$messageX = '<table width="100%" id="emp_table" border="0"><tr class="tr_header"><th ><a href="' . sortorder('last_name') . '" class="sort">Name</a></th><th ><a href="' . sortorder('rcp_school') . '" class="sort">School</a></th><th ><a href="' . sortorder('rcp_role') . '" class="sort">Role</a></th><th ><a href="' . sortorder('rcp_gender') . '" class="sort">Team Gender</a></th><th ><a href="' . sortorder('user_email') . '" class="sort">Email</a></th><th ><a href="' . sortorder('rcp_phone') . '" class="sort">Phone</a></th></tr>'; 

// get array of Users with a role of 'member'
$membershipsX = get_users('orderby=meta_value&meta_key=last_name&role=member');

// For each active member, write a row with Name, custom meta fields, Email
foreach ($membershipsX as $valueX) {
$user_idX = $valueX->ID;
$user_infoX = get_userdata($user_idX);
$FnameX = $user_infoX->first_name;  
$LnameX = $user_infoX->last_name;
$SchoolX = get_user_meta( $user_idX, 'rcp_school', true );
$RoleX = get_user_meta( $user_idX, 'rcp_role', true );
$GenderX = get_user_meta( $user_idX, 'rcp_gender', true );
$EmailX = $user_infoX->user_email;
$PhoneX = get_user_meta( $user_idX, 'rcp_phone', true );

$messageX .= '<tr><td class="directory-cell">' . $LnameX . ', ' . $FnameX . '</td><td class="directory-cell">' . $SchoolX . '</td><td class="directory-cell">' . $RoleX . '</td><td class="directory-cell">' . $GenderX . '</td><td class="directory-cell">' . $EmailX . '</td><td class="directory-cell">' . $PhoneX . '</td></tr>';}  

// Close table after all active members are looped through  
$messageX .= '</table>';    

// Return output for shortcode
return $messageX;
}

// register shortcode
add_shortcode('membersX', 'membersX_shortcode');
0 Answers
Related