2015-11-10 16 views
14

Sto utilizzando "Esporta utenti in CSV" un plug-in per wordpress. Per impostazione predefinita, il plugin estrae solo wp_users e wp_usermetaEsporta informazioni utente in CSV - Colonna aggiuntiva

Desidero aggiungere colonna post_title da wp_posts. Sono stato in grado di estrarre il 'post_title' nel file CSV, MA non è posizionato correttamente nella rispettiva riga.

Si prega di vedere il mio codice modificato e codice originale

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

versione modificata

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

Spero che la mia spiegazione non è fonte di confusione. Saluti!

Ecco un'immagine per spiegare meglio:

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

risposta

5

Il problema è che si sta utilizzando l'elenco dei titoli come colonne, dal momento che wp_list_pluck non mantiene il nome della colonna post_title.

L'approccio sarebbe diverso se si desidera utilizzare solo un post del titolo per utente o se si desidera altro, soprattutto poiché il nome della colonna cambierà.
Supponendo che li vuoi tutti, possiamo creare un approccio semplice che puoi migliorare.

Ad esempio, direi.

In primo luogo, rimuovere queste due linee

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

e cambiare $fields = array_merge($data_keys, $meta_keys, $post_keys); da $fields = array_merge($data_keys, $meta_keys, $post_keys);

Poi, prima

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

si aggiunge

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

Con questo, le intestazioni delle colonne per i titoli dei post non saranno impostate, possiamo migliorarle per settarla se ne hai bisogno, ma dovresti avere già una colonna per ogni titolo del post

+0

In realtà ho sbagliato, il tuo codice ha fatto estraete i titoli dei post, ma non sono organizzati per utente. i titoli dei post sono usciti in lunghe celle orizzontali di grandi dimensioni: controlla questo https://www.dropbox.com/s/xijkb4fp16atcx3/question-jpeg.jpg?dl=0 alla fine dell'immagine, questo è il layout dei risultati che voglio –

+0

Puoi controllare se ho fatto bene: http://prntscr.com/93967h –

+0

rimuovere '' 'dopo' FROM $ wpdb-> posts' –

Problemi correlati