I’m using the ‘Export Users to CSV’ a plugin for wordpress. By default, The plugin only extracts wp_users and wp_usermeta
I have been wanting to add post_title column from wp_posts. I was able to pull out the ‘post_title’ into the CSV file BUT it’s not placed correctly in its respective row.
Please see my edited code and original code
Orignal version:
global $wpdb;
$data_keys = array(
'ID', 'user_login', 'user_pass',
'user_nicename', 'user_email', 'user_url',
'user_registered', 'user_activation_key', 'user_status',
'display_name'
);
$meta_keys = $wpdb->get_results( "SELECT distinct(meta_key) FROM $wpdb->usermeta" );
$meta_keys = wp_list_pluck( $meta_keys, 'meta_key' );
$fields = array_merge( $data_keys, $meta_keys);
$headers = array();
foreach ( $fields as $key => $field ) {
if ( in_array( $field, $exclude_data ) )
unset( $fields[$key] );
else
$headers[] = '"' . strtolower( $field ) . '"';
}
echo implode( ',', $headers ) . "n";
foreach ( $users as $user ) {
$data = array();
foreach ( $fields as $field ) {
$value = isset( $user->{$field} ) ? $user->{$field} : '';
$value = is_array( $value ) ? serialize( $value ) : $value;
$data[] = '"' . str_replace( '"', '""', $value ) . '"';
}
echo implode( ',', $data ) . "n";
}
Edited version
global $wpdb;
$data_keys = array(
'ID', 'user_login', 'user_pass',
'user_nicename', 'user_email', 'user_url',
'user_registered', 'user_activation_key', 'user_status',
'display_name'
);
$meta_keys = $wpdb->get_results( "SELECT distinct(meta_key) FROM $wpdb->usermeta" );
$meta_keys = wp_list_pluck( $meta_keys, 'meta_key' );
$post_keys = $wpdb->get_results( "SELECT distinct(post_title) FROM $wpdb->posts" );
$post_keys = wp_list_pluck( $post_keys, 'post_title' );
$fields = array_merge( $data_keys, $meta_keys, $post_keys);
$headers = array();
foreach ( $fields as $key => $field ) {
if ( in_array( $field, $exclude_data ) )
unset( $fields[$key] );
else
$headers[] = '"' . strtolower( $field ) . '"';
}
echo implode( ',', $headers ) . "n";
foreach ( $users as $user ) {
$data = array();
foreach ( $fields as $field ) {
$value = isset( $user->{$field} ) ? $user->{$field} : '';
$value = is_array( $value ) ? serialize( $value ) : $value;
$data[] = '"' . str_replace( '"', '""', $value ) . '"';
}
echo implode( ',', $data ) . "n";
}
I hope my explanation is not confusing. Cheers!
Here’s an image to explain it better :
https://www.dropbox.com/s/xijkb4fp16atcx3/question-jpeg.jpg?dl=0
The problem is that you are using the list of titles as columns, since
wp_list_pluck
doesn’t retain the column namepost_title
.The approach would be different if you want to use just one title post per user, or you want more, especially since the name for the column will change.
Assuming you want them all, we can create a simple approach that you can improve.
For example, I would say.
First, remove these two lines
and change
$fields = array_merge( $data_keys, $meta_keys, $post_keys);
by$fields = array_merge( $data_keys, $meta_keys, $post_keys);
Then, before
you add
With this, the column headers for the post titles wont be set, we can improve it to set it if you need it, but you should have already a column per every post title