exists() ) { // Prepare activity data. $activity = array( 'username' => $user->user_login, 'timestamp' => current_time( 'mysql' ), ); // Get existing activity data. $existing_data = get_post_meta( $post_id, '_skat_activity_log', true ); if ( ! is_array( $existing_data ) ) { $existing_data = array(); } // Append new activity and limit to 15 records. $existing_data[] = $activity; if ( count( $existing_data ) > 15 ) { array_shift( $existing_data ); // Remove the oldest record. } // Update the meta key. update_post_meta( $post_id, '_skat_activity_log', $existing_data ); } } add_action( 'save_post', 'skat_track_user_activity', 10, 2 ); /** * Displays activity log in a custom meta box. * * @param WP_Post $post Post object. */ function skat_add_meta_box( $post ) { add_meta_box( 'skat_activity_log', __( 'Activity Log', 'activity-tracker' ), 'skat_display_meta_box', null, // Applicable to all post types. 'side', 'high' ); } add_action( 'add_meta_boxes', 'skat_add_meta_box' ); /** * Callback for displaying the activity log meta box. * * @param WP_Post $post Post object. */ function skat_display_meta_box( $post ) { // Get activity log. $activity_log = get_post_meta( $post->ID, '_skat_activity_log', true ); if ( ! empty( $activity_log ) && is_array( $activity_log ) ) { echo '
'; esc_html_e( 'No activity recorded.', 'activity-tracker' ); echo '
'; } } /** * Enqueue custom admin CSS for the activity tracker. */ function skat_enqueue_admin_styles() { // Register and enqueue the CSS file. wp_register_style( 'skat-admin-styles', SKAT_ACTIVITY_TRACKER_PLUGIN_DIR_URL . 'assets/css/admin-styles.css', array(), SKAT_ACTIVITY_TRACKER_VERSION ); wp_enqueue_style( 'skat-admin-styles' ); } add_action( 'admin_enqueue_scripts', 'skat_enqueue_admin_styles' );