Skip to content

Instantly share code, notes, and snippets.

@strangerstudios
Last active April 7, 2021 02:48
Show Gist options
  • Select an option

  • Save strangerstudios/898055f2d6f5a9676bf1 to your computer and use it in GitHub Desktop.

Select an option

Save strangerstudios/898055f2d6f5a9676bf1 to your computer and use it in GitHub Desktop.
Show and Search By Payment/Subscription Transaction IDs with Paid Memberships Pro
<?php
/*
Payment/Subscription Transaction IDs Code
Add to your active theme's functions.php or a custom plugin.
*/
//Add Transaction IDs to Members List
function tids_pmpro_memberslist_extra_cols_header($theusers)
{
?>
<th><?php _e('Transaction IDs', 'pmpro');?></th>
<?php
}
add_action('pmpro_memberslist_extra_cols_header', 'tids_pmpro_memberslist_extra_cols_header');
function tids_pmpro_memberslist_extra_cols_body($theuser)
{
$order = new MemberOrder();
$order->getLastMemberOrder($theuser->ID, "");
?>
<td>
<?php _e('Payment', 'pmpro');?>: <?php if(!empty($order->payment_transaction_id)) echo '<a href="' . admin_url('admin.php?page=pmpro-orders&order=' . $order->id) . '">' . $order->payment_transaction_id . '</a>'; else echo "N/A";?>
<br />
<?php _e('Subscription', 'pmpro');?>: <?php if(!empty($order->subscription_transaction_id)) echo '<a href="' . admin_url('admin.php?page=pmpro-orders&order=' . $order->id) . '">' .$order->subscription_transaction_id . '</a>'; else echo "N/A";?>
</td>
<?php
}
add_action('pmpro_memberslist_extra_cols_body', 'tids_pmpro_memberslist_extra_cols_body');
//add Transaction IDs to members list CSV
function tids_pmpro_members_list_csv_extra_columns($columns)
{
$columns["subscription_transaction_id"] = "tids_csv_columns_get_order_property";
$columns["payment_transaction_id"] = "tids_csv_columns_get_order_property";
return $columns;
}
add_filter('pmpro_members_list_csv_extra_columns', 'tids_pmpro_members_list_csv_extra_columns');
function tids_csv_columns_get_order_property($theuser, $heading)
{
global $tids_csv_columns_orders;
if(!isset($tids_csv_columns_orders))
$tids_csv_columns_orders = array();
if(!isset($tids_csv_columns_orders[$theuser->ID]))
{
$tids_csv_columns_orders[$theuser->ID] = new MemberOrder;
$tids_csv_columns_orders[$theuser->ID]->getLastMemberOrder($theuser->ID);
}
if(!empty($tids_csv_columns_orders[$theuser->ID]))
return $tids_csv_columns_orders[$theuser->ID]->$heading;
else
return "";
}
//Search Sub IDs on Members List Page
function tids_pmpro_members_list_sql($sqlQuery)
{
global $wpdb;
$s = $_REQUEST['s'];
if(!empty($s) && strlen($s) > 8)
{
//look for orders with this sub id
$user_ids = $wpdb->get_col("SELECT user_id FROM $wpdb->pmpro_membership_orders WHERE subscription_transaction_id lIKE '%" . esc_sql($s) . "%' OR payment_transaction_id LIKE '%" . esc_sql($s) . "%' GROUP BY user_id");
if(!empty($user_ids))
{
//some vars for the search
$l = $_REQUEST['l'];
if(isset($_REQUEST['pn']))
$pn = $_REQUEST['pn'];
else
$pn = 1;
if(isset($_REQUEST['limit']))
$limit = $_REQUEST['limit'];
else
$limit = 15;
$end = $pn * $limit;
$start = $end - $limit;
//filter results to only include these user ids
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, mu.cycle_number, mu.billing_limit, mu.trial_amount, mu.trial_limit, UNIX_TIMESTAMP(mu.startdate) as startdate, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id ";
if($l == "oldmembers")
$sqlQuery .= " LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON u.ID = mu2.user_id AND mu2.status = 'active' ";
//this is the line changed
$sqlQuery .= " WHERE u.ID IN(" . implode(",", $user_ids) . ") ";
//---
if($l == "oldmembers")
$sqlQuery .= " AND mu.status = 'inactive' AND mu2.status IS NULL ";
elseif($l)
$sqlQuery .= " AND mu.status = 'active' AND mu.membership_id = '" . $l . "' ";
else
$sqlQuery .= " AND mu.status = 'active' ";
$sqlQuery .= "GROUP BY u.ID ";
if($l == "oldmembers")
$sqlQuery .= "ORDER BY enddate DESC ";
else
$sqlQuery .= "ORDER BY u.user_registered DESC ";
$sqlQuery .= "LIMIT $start, $limit";
}
}
return $sqlQuery;
}
add_filter('pmpro_members_list_sql', 'tids_pmpro_members_list_sql');
//add transaction ids to WP users list
function tids_manage_users_columns($columns) {
$columns['tids_transaction_ids'] = __('Transaction IDs', 'pmpro');
return $columns;
}
function tids_manage_users_custom_column($column_data, $column_name, $user_id) {
//make sure PMPro is installed
if(!class_exists("MemberOrder"))
return $column_data;
if($column_name == 'tids_transaction_ids') {
$order = new MemberOrder();
$order->getLastMemberOrder($user_id, "");
$column_data = __('Pay', 'pmpro') . ": ";
if(!empty($order) && !empty($order->payment_transaction_id))
$column_data .= '<a href="' . admin_url('admin.php?page=pmpro-orders&order=' . $order->id) . '">' . $order->payment_transaction_id . '</a>';
else
$column_data .= "N/A";
$column_data .= "<br />" . __('Sub', 'pmpro') . ": ";
if(!empty($order) && !empty($order->subscription_transaction_id))
$column_data .= '<a href="' . admin_url('admin.php?page=pmpro-orders&order=' . $order->id) . '">' . $order->subscription_transaction_id . '</a>';
else
$column_data .= "N/A";
}
return $column_data;
}
add_filter('manage_users_columns', 'tids_manage_users_columns');
add_filter('manage_users_custom_column', 'tids_manage_users_custom_column', 10, 3);
//add some fields to search in users list
function tids_pre_user_query( $user_query )
{
// Make sure this is only applied to user search
if ( $user_query->query_vars['search'] ){
$search = trim( $user_query->query_vars['search'], '*' );
if ( $_REQUEST['s'] == $search ){
global $wpdb;
//look for transaction ids
if(strlen($search) > 8)
{
$user_ids = $wpdb->get_col("SELECT user_id FROM $wpdb->pmpro_membership_orders WHERE subscription_transaction_id lIKE '%" . esc_sql($search) . "%' OR payment_transaction_id LIKE '%" . esc_sql($search) . "%' GROUP BY user_id");
}
if(!empty($user_ids))
{
$user_query->query_where = "WHERE 1=1 AND ID IN(" . implode(",", $user_ids) . ") ";
}
else
{
$user_query->query_from .= " LEFT JOIN $wpdb->usermeta MF ON MF.user_id = {$wpdb->users}.ID AND MF.meta_key = 'first_name'";
$user_query->query_from .= " LEFT JOIN $wpdb->usermeta ML ON ML.user_id = {$wpdb->users}.ID AND ML.meta_key = 'last_name'";
$user_query->query_from .= " LEFT JOIN $wpdb->usermeta AE ON AE.user_id = {$wpdb->users}.ID AND AE.meta_key = 'AdditionalEmail'";
$user_query->query_where = 'WHERE 1=1' . $user_query->get_search_sql( $search, array( 'user_login', 'user_email', 'user_nicename', 'MF.meta_value', 'ML.meta_value', 'AE.meta_value' ), 'both' );
}
}
}
}
add_action( 'pre_user_query', 'tids_pre_user_query' );
//add transaction ids to edit user page
function tids_profile_fields($user)
{
$order = new MemberOrder();
$order->getLastMemberOrder($user->ID, "");
?>
<h3><?php _e('Transaction IDs', 'pmpro');?></h3>
<p>
<?php _e('Payment', 'pmpro');?>: <?php if(!empty($order->payment_transaction_id)) echo '<a href="' . admin_url('admin.php?page=pmpro-orders&order=' . $order->id) . '">' . $order->payment_transaction_id . '</a>'; else echo "N/A";?>
<br />
<?php _e('Subscription', 'pmpro');?>: <?php if(!empty($order->subscription_transaction_id)) echo '<a href="' . admin_url('admin.php?page=pmpro-orders&order=' . $order->id) . '">' . $order->subscription_transaction_id . '</a>'; else echo "N/A";?>
</p>
<?php
}
add_action( 'show_user_profile', 'tids_profile_fields' );
add_action( 'edit_user_profile', 'tids_profile_fields' );
?>
@laurenhagan0306
Copy link
Copy Markdown

This recipe is included in the blog post on "Display Order Transaction IDs and Allow Search by ID in the WordPress Admin" at Paid Memberships Pro here: https://www.paidmembershipspro.com/display-order-transaction-ids-and-allow-search-by-id-in-the-wordpress-admin/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment