Kami memiliki masalah dengan plugin WP yang kami tulis dan kelola - Ekspor Data Pengguna
Seorang pengguna telah melaporkan masalah bahwa catatan data meta pengguna yang tidak unik tidak dikembalikan dengan benar - di sini
Di plugin, kami mengekspor data usermeta yang dipilih oleh pengguna - menggunakan get_users () yang pada gilirannya menggunakan WP_User_Query:
Kami memberikan beberapa argumen sederhana ke get_users:
// build argument array ##
$args = array(
'fields' => 'all',
'role' => sanitize_text_field( $_POST['role'] )
);
Jika kami memeriksa objek WP_User dikembalikan, bidang usermeta tidak dikembalikan - misalnya (data objek dikurangi untuk menghemat ruang):
Array
(
[0] => WP_User Object
(
[data] => stdClass Object
(
[ID] => 1267
[user_login] => user@email.com
...
)
[ID] => 1267
...
)
[1]...
Kami telah mencoba mengubah argumen get_users untuk parameter "bidang" dari "semua" menjadi "all_with_meta", namun ini tampaknya tidak mengubah data yang dikembalikan semula.
Pada titik di mana kami mengekspor baris metadata pengguna ini, pertama-tama kami mengulangi array objek WP_User tersebut dan kemudian mengulang data individual usermeta field ($ field berasal dari array $ fields yang loop di luar $ users loop):
// build row values for each user ##
foreach ( $users as $user ) {
// grab value from $user object ##
$value = $user->{$field};
}
Data bidang sedang ditambahkan secara ajaib ke objek $ user, meskipun ini tidak ditampilkan dalam data objek yang awalnya dikembalikan - namun, kami tidak memiliki kontrol atas apakah mengembalikan satu atau array nilai untuk setiap bidang usermeta.
Karena data dikembalikan secara otomatis, kami tidak mengendalikan metode yang dipilih, yang dapat kami lakukan jika kami menggunakan get_user_meta secara langsung (tetapi kami masih memiliki masalah karena tidak mengetahui data yang disimpan unik atau tidak, tanpa menjalankan tambahan pertanyaan - yang akan mahal pada ekspor besar).
Saya menulis ini semua untuk mencoba dan menjelaskan kepada orang lain masalah ini, sementara juga untuk membantu kami mencari jawaban dan menyelesaikan masalah ini.
Memperbarui
Kami telah mendorong uji perbaikan ke github menggunakan metode untuk memeriksa kunci usermeta yang tidak unik dan mengembalikan array jika ada lebih dari satu kunci yang cocok.