Chúng tôi gặp sự cố với plugin WP mà chúng tôi đã viết và duy trì - Xuất dữ liệu người dùng
Một người dùng đã báo cáo một vấn đề rằng các bản ghi dữ liệu meta người dùng không phải là duy nhất không được trả lại chính xác - tại đây
Trong plugin, chúng tôi xuất dữ liệu usermeta do người dùng chọn - sử dụng get_users () lần lượt sử dụng WP_User_Query:
Chúng tôi chuyển một vài đối số đơn giản cho get_users:
// build argument array ##
$args = array(
'fields' => 'all',
'role' => sanitize_text_field( $_POST['role'] )
);
Nếu chúng tôi kiểm tra một đối tượng WP_User được trả về, các trường usermeta sẽ không được trả về - ví dụ (dữ liệu đối tượng được giảm để tiết kiệm dung lượng):
Array
(
[0] => WP_User Object
(
[data] => stdClass Object
(
[ID] => 1267
[user_login] => user@email.com
...
)
[ID] => 1267
...
)
[1]...
Chúng tôi đã cố gắng thay đổi tham số get_users cho tham số "trường" từ "tất cả" thành "all_with_meta", tuy nhiên điều này dường như không thay đổi dữ liệu được trả về ban đầu.
Tại thời điểm chúng tôi xuất các hàng siêu dữ liệu người dùng này, trước tiên chúng tôi sẽ lặp qua mảng các đối tượng WP_User đó và sau đó lặp lại dữ liệu trường usermeta riêng lẻ (trường $ đến từ một mảng các trường $ lặp bên ngoài vòng lặp $ users):
// build row values for each user ##
foreach ( $users as $user ) {
// grab value from $user object ##
$value = $user->{$field};
}
Dữ liệu trường đang được thêm một cách kỳ diệu vào đối tượng $ user, mặc dù điều này không được hiển thị trong dữ liệu đối tượng được trả về ban đầu - tuy nhiên, chúng tôi không kiểm soát được nếu nó trả về một hoặc một giá trị cho mỗi trường usermeta.
Vì dữ liệu được trả về tự động, chúng tôi không kiểm soát phương thức đã chọn, chúng tôi sẽ có thể nếu chúng tôi sử dụng trực tiếp get_user_meta (nhưng chúng tôi vẫn có vấn đề không biết dữ liệu được lưu trữ là duy nhất hay không, mà không chạy thêm truy vấn - sẽ tốn kém khi xuất khẩu lớn).
Tôi đang viết tất cả những điều này để cố gắng giải thích cho người khác về vấn đề này, đồng thời để giúp chúng tôi tìm kiếm câu trả lời và giải quyết vấn đề này.
Cập nhật
Chúng tôi đã đẩy một bản sửa lỗi thử nghiệm lên github bằng một phương pháp để kiểm tra các khóa usermeta không duy nhất và trả về một mảng trong trường hợp có nhiều hơn một khóa khớp