OK. First up – please remember that I am unable to test this immediately. it should work but it might need some correction along the way. So please bear with me on this.
If this works then I can ensure that the filter call is placed in core code for the next release so your code will continue to work after the next update you make to the Simple:Press core.
So first – we need to make a small edit to a core code file. This file is:
/wp-content/plugins/simple-press/sp-api/sp-api-users.php
You need the function called sp_create_member_data() which is the second function in the file.
After the case statement locate this line of code:
$display_name = sp_filter_name_save($display_name);
Add the first line below ABOVE this line of code as shown:
$display_name = apply_filters('sph_set_display_name', $display_name, $userid);
$display_name = sp_filter_name_save($display_name);
And save the file. Now open the spFunctions.php file of the Simple:Press Theme you are using (in the templates folder of the theme).
Add this code somewhere in that file:
add_filter('sph_set_display_name', 'setup_display_name', 1, 2);
function setup_display_name($display_name, $userid) {
$first_name = get_user_meta($userid, 'first_name', true);
$last_name = get_user_meta($userid, 'last_name', true);
return $first_name[0].$last_name[0];
}
As I have said – this is completely untested. if it does not work it will probably be a typo or something on my side. But try it by registering a new user to see if it saves the initials as the display name.
Let me know.