Support » Plugin: Export User Data » Non-unique meta fields

  • Resolved Nicholas Turbanov

    (@ntd)


    Hi there,

    Thanks for the plugin, it works nicely and I especially like that it exports directly to Excel format (and not just CSV).

    I did however stumble into one problem. When exporting non-unique extra user meta fields, only the first one is exported. Ie. I have fields in the database with the same meta_key and the export only exports the first.

    Do you think you could fix this?

    Cheers,

    Nicholas

    https://wordpress.org/plugins/export-user-data/

Viewing 9 replies - 1 through 9 (of 9 total)
  • Plugin Author qstudio

    (@qlstudio)

    @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!

    Plugin Author qstudio

    (@qlstudio)

    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.

    Plugin Author qstudio

    (@qlstudio)

    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!

    Plugin Author qstudio

    (@qlstudio)

    Good news – that’s the most important!

    Q

    Plugin Author qstudio

    (@qlstudio)

    @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

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘Non-unique meta fields’ is closed to new replies.