2015-11-10 11 views
14

私は、 'CSVへのユーザーエクスポート'を使用しています。デフォルトでは、プラグインはwp_usersとwp_usermetaのみを抽出しますユーザー情報をCSVにエクスポートする - 追加の列

私はwp_postsからpost_titleカラムを追加したいと思っています。私は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"; 
} 

私の編集したコードと元のコード

のorignalバージョンを参照してください。乾杯!

ここでは、より良い、それを説明するためのイメージです。

https://www.dropbox.com/s/xijkb4fp16atcx3/question-jpeg.jpg?dl=0

答えて

5

問題はwp_list_pluckは、列名post_titleが保持されませんので、あなたは、列としてタイトルのリストを使用していることです。

ユーザーごとに1つのタイトル投稿を使用したい場合や、特に列の名前が変更されるため、より多くのものを使用する場合は、アプローチが異なります。
あなたがそれらをすべて望んでいるとすれば、改善できる単純なアプローチを作成できます。

たとえば、私は言うでしょう。

まず、あなたが追加

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

前に、次の2行

$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);を変更

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

これで、投稿タイトルの列見出しは設定されません。必要に応じて設定することができますが、投稿タイトルごとに既に列がある必要があります。

+0

実際には間違っています投稿タイトルを引き出すことはできますが、ユーザーごとにアレンジされません。投稿のタイトルが長い長い水平のセルに出てきました。画像の最後にhttps://www.dropbox.com/s/xijkb4fp16atcx3/question-jpeg.jpg?dl=0をチェックしてください。私が望む –

+0

私は正しいかどうか確認してください:http://prntscr.com/93967h –

+0

'FROM $ wpdb-> posts'の後の' ''を削除してください –

関連する問題