2015-11-10 31 views
14

Używam wtyczki "Eksportuj użytkowników do CSV" dla wordpress. Domyślnie wtyczka pobiera tylko wp_users i wp_usermetaEksportuj informacje o użytkowniku do pliku CSV - dodatkowa kolumna

Chciałam dodać kolumnę post_title z wp_posts. Byłem w stanie wyciągnąć "post_title" do pliku CSV, ALE nie został on poprawnie umieszczony w odpowiednim wierszu.

Proszę zobaczyć moje edytowanego kodu i oryginalny kod

wersji Orignal:

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"; 
} 

wersja Zmieniano

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"; 
} 

Mam nadzieję, że moje wyjaśnienie nie jest mylące. Twoje zdrowie!

Oto zdjęcie, aby wyjaśnić to lepiej:

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

Odpowiedz

5

Problem polega na tym, że używasz listę tytułów jak kolumny, ponieważ wp_list_pluck nie zachowuje nazwę kolumny post_title.

Podejście będzie inne, jeśli chcesz użyć tylko jednego tytułu na użytkownika, lub chcesz więcej, zwłaszcza, że ​​zmieni się nazwa kolumny.
Zakładając, że chcesz je wszystkie, możemy stworzyć proste podejście, które możesz poprawić.

Na przykład, powiedziałbym.

Po pierwsze, usunąć te dwie linie

$post_keys = $wpdb->get_results("SELECT distinct(post_title) FROM $wpdb->posts"); 
$post_keys = wp_list_pluck($post_keys, 'post_title'); 

i zmienić $fields = array_merge($data_keys, $meta_keys, $post_keys); przez $fields = array_merge($data_keys, $meta_keys, $post_keys);

Następnie, przed

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

dodać

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

Dzięki temu nagłówki kolumn dla tytułów postów nie zostaną ustawione, możemy je poprawić, aby je ustawić, jeśli tego potrzebujesz, ale powinieneś mieć już kolumnę na każdy tytuł posta

+0

Właściwie nie mam racji, twój kod nie wyciągnij tytuły postów, ale nie są one ułożone według użytkowników. tytuły postów pojawiały się w dużych, długich poziomych komórkach: sprawdź to https://www.dropbox.com/s/xijkb4fp16atcx3/question-jpeg.jpg?dl=0 na końcu obrazu, to układ wyników, który Chcę –

+0

Czy możesz sprawdzić, czy zrobiłem dobrze: http://prntscr.com/93967h –

+0

usunąć '' 'after' FROM $ wpdb-> posts' –

Powiązane problemy