简体   繁体   English

将用户信息导出到CSV-附加列

[英]Export User Info into CSV - Additional Column

I'm using the 'Export Users to CSV' a plugin for wordpress. 我使用的是“将用户导出为CSV” wordpress插件。 By default, The plugin only extracts wp_users and wp_usermeta 默认情况下,该插件仅提取wp_users和wp_usermeta

I have been wanting to add post_title column from wp_posts. 我一直想从wp_posts添加post_title列。 I was able to pull out the 'post_title' into the CSV file BUT it's not placed correctly in its respective row. 我能够将“ post_title”拉出到CSV文件中,但未正确放置在其相应行中。

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 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 name post_title . 问题是您将标题列表用作列,因为wp_list_pluck不保留列名post_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 首先,删除这两行

$post_keys = $wpdb->get_results( "SELECT distinct(post_title) FROM $wpdb->posts" );
$post_keys = wp_list_pluck( $post_keys, 'post_title' );

and change $fields = array_merge( $data_keys, $meta_keys, $post_keys); 并更改$fields = array_merge( $data_keys, $meta_keys, $post_keys); by $fields = array_merge( $data_keys, $meta_keys, $post_keys); 通过$fields = array_merge( $data_keys, $meta_keys, $post_keys);

Then, before 那之前

 echo implode( ',', $data ) . "\n";

you add 您添加

$post_keys = $wpdb->get_results( "SELECT distinct(post_title) FROM $wpdb->posts  WHERE (post_type LIKE 'page' OR post_type LIKE 'post') and post_status LIKE 'publish' AND post_author = ". $user->ID );
$post_titles = wp_list_pluck( $post_keys, 'post_title');
$data =array_merge ($data, $post_titles);

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 这样,就不会设置帖子标题的列标题,如果需要,我们可以对其进行改进以进行设置,但是每个帖子标题都应该有一个列

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM