将用户信息导出到 CSV - 附加列
Posted
技术标签:
【中文标题】将用户信息导出到 CSV - 附加列【英文标题】:Export User Info into CSV - Additional Column 【发布时间】:2016-02-11 00:38:17 【问题描述】:我正在使用 'Export Users to CSV' 一个 wordpress 插件。默认情况下,插件只提取 wp_users 和 wp_usermeta
我一直想从 wp_posts 添加 post_title 列。我能够将“post_title”提取到 CSV 文件中,但它没有正确放置在相应的行中。
请看我修改后的代码和原代码
原版:
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";
修改后的版本
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";
我希望我的解释不会令人困惑。干杯!
这里有一张图片可以更好地解释它:
https://www.dropbox.com/s/xijkb4fp16atcx3/question-jpeg.jpg?dl=0
【问题讨论】:
【参考方案1】:问题在于您将标题列表用作列,因为wp_list_pluck
不保留列名称post_title
。
如果您只想为每个用户使用一个标题帖子,或者您想要更多,则方法会有所不同,特别是因为列的名称会发生变化。 假设您想要所有这些,我们可以创建一个您可以改进的简单方法。
例如,我会说。
首先,去掉这两行
$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);
by $fields = array_merge( $data_keys, $meta_keys, $post_keys);
那么,之前
echo implode( ',', $data ) . "\n";
你添加
$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);
这样,帖子标题的列标题将不会设置,如果您需要,我们可以对其进行改进以设置它,但是每个帖子标题应该已经有一个列
【讨论】:
其实我错了,您的代码确实提取了帖子标题,但它们没有按用户排列。帖子标题出现在一个大而长的水平单元格中:请检查图片末尾的dropbox.com/s/xijkb4fp16atcx3/question-jpeg.jpg?dl=0,这就是我想要的结果布局 删除"
之后的FROM $wpdb->posts
也将$fields = array_merge( $data_keys, $meta_keys, $post_keys);
更改为$fields = array_merge( $data_keys, $meta_keys);
并删除最后一个 ." post_author = ". $user->ID
让我们continue this discussion in chat.以上是关于将用户信息导出到 CSV - 附加列的主要内容,如果未能解决你的问题,请参考以下文章
如何将JavaScript数组信息导出到csv(在客户端)?
将 pcap 数据导出到 csv:时间戳、字节、上行链路/下行链路、额外信息 [关闭]
SQL Server 2012 Management Studio:选择,导出,附加