sourcecode

사용자 정보를 CSV로 내보내기 - 추가 컬럼

codebag 2023. 2. 27. 22:49
반응형

사용자 정보를 CSV로 내보내기 - 추가 컬럼

워드프레스용 플러그인을 'Export Users to CSV'로 사용하고 있습니다.기본적으로 플러그인은 wp_users와 wp_usermeta만 추출합니다.

wp_posts에서 post_title column을 추가하고 싶습니다.CSV 파일에 'post_title'을 꺼낼 수 있었지만 각 행에 올바르게 배치되지 않았습니다.

편집한 코드와 오리지널 코드를 봐주세요.

오리그널 버전:

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

문제는 제목 목록을 열로 사용한다는 것입니다.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);타고$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);

이것에 의해, 투고 타이틀의 열 헤더는 설정되지 않기 때문에, 필요에 따라서 설정할 수 있습니다만, 각 투고 타이틀 마다 열이 이미 설정되어 있을 것입니다.

언급URL : https://stackoverflow.com/questions/33624841/export-user-info-into-csv-additional-column

반응형