【问题标题】:Export User Info into CSV - Additional Column将用户信息导出到 CSV - 附加列
【发布时间】: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

【问题讨论】:

    标签: php mysql wordpress


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2015-10-27
    • 2019-12-22
    • 1970-01-01
    • 2011-01-28
    • 2022-07-12
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多