Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将用户信息导出到CSV-附加列_Php_Mysql_Wordpress - Fatal编程技术网

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

Php 将用户信息导出到CSV-附加列,php,mysql,wordpress,Php,Mysql,Wordpress,我正在使用wordpress的“将用户导出到CSV”插件。默认情况下,该插件仅提取wp_用户和wp_usermeta 我一直想从wp_的帖子中添加帖子标题栏。我能够将“post_title”拉到CSV文件中,但它没有正确地放在相应的行中 请查看我编辑的代码和原始代码 原始版本: global $wpdb; $data_keys = array( 'ID', 'user_login', 'user_pass', 'user_nicename', 'user_email', 'use

我正在使用wordpress的“将用户导出到CSV”插件。默认情况下,该插件仅提取wp_用户和wp_usermeta

我一直想从wp_的帖子中添加帖子标题栏。我能够将“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";
}
我希望我的解释不会令人困惑。干杯

下面是一张更好地解释它的图片:


问题在于您将标题列表用作列,因为
wp\u list\u pull
不保留列名
post\u title

如果您希望每个用户只使用一篇标题文章,或者希望使用更多标题文章,则方法可能会有所不同,尤其是因为专栏名称将发生更改。
假设您想要所有这些,我们可以创建一个简单的方法,您可以进行改进

例如,我会说

首先,删除这两行

$post_keys = $wpdb->get_results( "SELECT distinct(post_title) FROM $wpdb->posts" );
$post_keys = wp_list_pluck( $post_keys, 'post_title' );
并更改
$fields=array\u merge($data\u key、$meta\u key、$post\u key)
by
$fields=array\u merge($data\u key、$meta\u key、$post\u key)

然后,之前

 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);

这样,就不会设置文章标题的列标题,如果您需要的话,我们可以对其进行改进以进行设置,但是您应该已经为每个文章标题设置了一个列

事实上,我错了,您的代码确实拉出了文章标题,但它们并没有按照用户进行排列。帖子标题出现在一个大的水平单元格中:请在图片末尾检查这个,这是我想要的结果布局从$wpdb->posts中删除
之后的
也更改
$fields=array\u merge($data\u key,$meta\u key,$post\u key);
通过
$fields=array\u merge($data\u key,$meta\u key)
并删除最后一个。”在
post_author=“.$user->ID
之后,让我们来看看。