@ntd – you can download and try with the latest development version hosted on github – https://github.com/qstudio/export-user-data
Please let us know any feedback here and we’ll try and get this fixed up.
Hey,
Thanks, but it’s still only exporting one line.
So what I have in the db in the wp_usermeta table are distinct rows with the same meta_key value (and user_id value), but different umeta_id values (and meta_value values).
What I get in the Excel file is just the meta_value of the row with the lowest umeta_id.
Hope this helps and thanks for the effort!
If you check the plugin code on export-user-data:1575 you will see a new method:
known_arrays()
This returns an array of meta fields which are known to contain arrays of data – it’s a bit of a hack for now – this returned array is filterable – so you could add something like to following to your functions.php ( untested code.. ):
function my_export_user_data_known_arrays( $array ) {
return array_push( $array, 'my_user_meta_key' );
}
add_filter( 'export_user_data_known_arrays', 'my_export_user_data_known_arrays' );
Where “my_user_meta_key” is the key that you know contains an array of data.
The code above is untested and will need some changes – read here for more info on using filters:
http://code.tutsplus.com/tutorials/writing-extensible-plugins-with-actions-and-filters–wp-26759
As I mentioned, this is likely a short term fix, for an odd bug – but if it works, please let us know.
The value itself is not an array (the value of meta_value), so this doesn’t work – it throws a PHP warning:
“PHP Warning: in_array() expects parameter 2 to be array, integer given in”
I’ll try to explain myself more clearly. Here’s my wp_usermeta table:
umeta_id | user_id | meta_key | meta_value
--------------------------------------------------------------
1 | 966 | wpcf-something | A string
--------------------------------------------------------------
2 | 966 | wpcf-something | Another string
--------------------------------------------------------------
3 | 966 | wpcf-something | One more string
--------------------------------------------------------------
In the export options, I’ve selected ‘wpcf-something’ as a field to be exported. Only ‘A string’ appears in the exported Excel file, under the column ‘wpcf-something’.
Unfortunately I don’t really have time at the moment to go through your code (I’ll gladly help later), but you don’t seem to use ‘get_user_meta’, which directly supports non-unique meta keys.
The plugin uses get_users, which itself uses WP_User_Query – this is the source of the issue, in regards to your question – because the user meta data is returned from this function call.
We might need to change this to return specific user_meta fields to see if this deals more correctly with keys which have non-unique values.
But, like you – we don’t have a lot of free time at present to look into this further.
When we do, I’ll be sure to upload an update to github – when it’s good, we’ll push it to wp.org.
Q
Cool, I ended up just modifying your plugin to include another filter that uses get_user_meta when applicable, with the same logic you provided.
public function known_not_unique() {
return apply_filters( 'export_user_data_not_singular', array() );
}
// check if field is known not to be unique
if ( in_array ( $field, $this->known_not_unique() ) ) {
$value = get_user_meta($user->ID, $field, false);
}
and in my functions.php
function my_export_user_data_not_singular( $array ) {
array_push( $array, 'wpcf-keskeiset-something' );
return $array;
}
add_filter( 'export_user_data_not_singular', 'my_export_user_data_not_singular' );
BTW there’s a slight error with your code example, array_push returns the number of items in the array, not the array itself 😉
So this works for me know.
Thanks!
Good news – that’s the most important!
Q
@ntd – we’ve pushed another update to github to try and address this issue, please can you try this and see if your exports run correctly and give us some feedback?
Thanks
Q