Created
December 12, 2022 13:59
-
-
Save ipokkel/82eea25a8820804fe67bc5bac19fa975 to your computer and use it in GitHub Desktop.
Show member's last login on the directory page and optionally include it in the memberslist columns, memberslist CSV export, and the user columns.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * Display user's last login on the PMPro directory page. | |
| * | |
| * Requires the pmpro_last_login field to be set in the shortcode. | |
| * e.g. [pmpro_member_directory fields="Last Login,pmpro_last_login"] | |
| * | |
| * Optional: Display on the memberslist | |
| * Optional: Display add to the memberslist CSV export | |
| * Optional: Display on the Users page | |
| * | |
| * Note: The CSV export will show the date in YYYY-MM-DD format. | |
| * This may be customized by changing the date format in the my_pmpro_members_list_last_login function. | |
| * | |
| * You can add this recipe to your site by creating a custom plugin | |
| * or using the Code Snippets plugin available for free in the WordPress repository. | |
| * Read this companion article for step-by-step directions on either method. | |
| * https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/ | |
| */ | |
| /* Set addditional options here, each option is boolean and accept either true or false */ | |
| $show_memberslist = true; // Display on the memberslist? | |
| $show_memberslist_csv = true; // Display add to the memberslist CSV export? | |
| $show_users_page = true; // Display on the Users page? | |
| /* End options */ | |
| // Get user's last login from pmpro_logins user meta. | |
| function pmpro_get_last_member_login( $user_id ) { | |
| // if user id is an object, get the id. | |
| if ( is_object( $user_id ) ) { | |
| $user_id = $user_id->ID; | |
| } | |
| // Let's assume they've never logged in. | |
| $last_login = 'Never'; | |
| // get the logins data | |
| $the_logins = get_user_meta( $user_id, 'pmpro_logins', true ); | |
| if ( ! empty( $the_logins ) ) { | |
| $last_login = $the_logins['last']; | |
| } | |
| return $last_login; | |
| } | |
| // Add last login to the user directory results | |
| function my_pmpromd_user_directory_results( $theusers ) { | |
| foreach ( $theusers as $key => $theuser ) { | |
| // check if user has last_login | |
| if ( empty( $theuser->pmpro_last_login ) ) { | |
| $last_login = pmpro_get_last_member_login( $theuser->ID ); | |
| // update user meta key pmpro_last_login | |
| update_user_meta( $theuser->ID, 'pmpro_last_login', $last_login ); | |
| $theuser->pmpro_last_login = $last_login; | |
| } | |
| } | |
| return $theusers; | |
| } | |
| add_filter( 'pmpromd_user_directory_results', 'my_pmpromd_user_directory_results' ); | |
| /** | |
| * Display user's last login on the Members List page. (Memberships > Members) | |
| */ | |
| if ( $show_memberslist ) { | |
| // Adds "Last Login" column to Members List. | |
| function my_pmpro_add_memberslist_col_company( $columns ) { | |
| $columns['last_login'] = 'Last Login'; | |
| return $columns; | |
| } | |
| add_filter( 'pmpro_manage_memberslist_columns', 'my_pmpro_add_memberslist_col_company' ); | |
| // Fills the "Last Login" column of the Members List. | |
| function my_pmpro_fill_memberslist_col_company( $colname, $user_id ) { | |
| if ( 'last_login' === $colname ) { | |
| echo esc_html( pmpro_get_last_member_login( $user_id ) ); | |
| } | |
| } | |
| add_filter( 'pmpro_manage_memberslist_custom_column', 'my_pmpro_fill_memberslist_col_company', 10, 2 ); | |
| } | |
| /** | |
| * Display user's last login on the Members List CSV export. (Memberships > Members) | |
| */ | |
| if ( $show_memberslist_csv ) { | |
| // Add the column to the CSV export | |
| function my_pmpro_members_list_csv_extra_columns( $columns ) { | |
| $columns['last_login'] = 'my_pmpro_members_list_last_login'; | |
| return $columns; | |
| } | |
| add_filter( 'pmpro_members_list_csv_extra_columns', 'my_pmpro_members_list_csv_extra_columns', 10 ); | |
| // Call back to get the column a value | |
| function my_pmpro_members_list_last_login( $user ) { | |
| $user_id = $user->ID; | |
| $last_login_value = pmpro_get_last_member_login( $user_id ); | |
| // Format the date for the CSV export. (YYYY-MM-DD) | |
| $last_login_value = ! empty( strtotime( $last_login_value ) ) ? date( 'Y-m-d', strtotime( $last_login_value ) ) : $last_login_value; | |
| return $last_login_value; | |
| } | |
| } | |
| /** | |
| * Display user's last login on the Users > All Users page. | |
| */ | |
| if ( $show_users_page ) { | |
| // Add 'Last Login' Column to Users List Header | |
| function my_pmpro_manage_users_columns( $columns ) { | |
| $columns['last_login'] = 'Last Login'; | |
| return $columns; | |
| } | |
| add_filter( 'manage_users_columns', 'my_pmpro_manage_users_columns' ); | |
| // Add 'Last Login' Column to Users List Rows | |
| function my_pmpro_manage_users_custom_column( $value, $column_name, $user_id ) { | |
| if ( 'last_login' == $column_name ) { | |
| $value = pmpro_get_last_member_login( $user_id ); | |
| } | |
| return $value; | |
| } | |
| add_action( 'manage_users_custom_column', 'my_pmpro_manage_users_custom_column', 10, 3 ); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment