7

Điều này sẽ dễ dàng cho một chuyên gia về PHP. Tôi gặp sự cố khi lưu trữ và kéo mảng trong Wordpress thông qua hàm update_user_meta.Lưu trữ các mảng PHP trong Wordpress Cơ sở dữ liệu người dùng Meta

Vì vậy, tôi đã một mảng kết hợp xây dựng giống như vậy:

Array 
(
    [film_genres] => Array 
     (
      [action] => 50 
      [comedy] => 50 
      [crime] => 50 
      [documentary] => 50 
      [drama] => 50 
      [family] => 50 
      [horror] => 50 
      [romantic] => 50 
      [sci-fi] => 50 
      [thriller] => 50 
     ) 

    [film_types] => Array 
     (
      [blockbuster] => 0 
      [independent] => 0 
     ) 

    [film_eras] => Array 
     (
      [1920s_1940s] => 0 
      [1950s_1960s] => 0 
      [1970s_1980s] => 0 
      [1990s_2000s] => 0 
      [post_2010] => 0 
      [pre_1920s] => 0 
     ) 

    [last_updated] => 2011-10-12 21:21:28 
)

Nhưng khi tôi đi để cập nhật dữ liệu này trong người sử dụng bảng meta qua:

update_user_meta ($ user_id, $ meta_key, $ meta_value, $ prev_value)

Dữ liệu được đặt trong db đúng cách, nhưng khi tôi gọi lại dữ liệu và in mảng mới vào màn hình, nó có khóa mảng lồng nhau của [0] trong mảng, như thế này :

 
Array 
(
    [0] => Array 
     (
      [film_genres] => Array 
       (
        [action] => 50 
        [comedy] => 50 
        [crime] => 50 
        [documentary] => 50 
        [drama] => 50 
        [family] => 50 
        [horror] => 50 
        [romantic] => 50 
        [sci-fi] => 50 
        [thriller] => 50 
       ) 

      [film_types] => Array 
       (
        [blockbuster] => 0 
        [independent] => 0 
       ) 

      [film_eras] => Array 
       (
        [1920s_1940s] => 0 
        [1950s_1960s] => 0 
        [1970s_1980s] => 0 
        [1990s_2000s] => 0 
        [post_2010] => 0 
        [pre_1920s] => 0 
       ) 

      [last_updated] => 2011-10-12 21:21:28 
     ) 

) 

Tôi làm cách nào để lưu trữ mảng chính xác như mảng đầu tiên của mình? Tôi kéo mảng giá trị meta qua lệnh WP:

$wp_user_film_prefs_arr = get_user_meta($wp_user_id, $wp_user_film_prefs_key_label, false);

Có cái gì tôi đang làm sai? Cảm ơn trước!!!

Trả lời

17

Bạn cần phải thiết lập các tham số cuối cùng từ false để true:

$wp_user_film_prefs_arr = get_user_meta($wp_user_id, $wp_user_film_prefs_key_label, true); 

Đó tham số thứ ba là $single:

(boolean) (không bắt buộc) Nếu giá trị trả thực sự của trường dữ liệu meta, nếu false trả về một mảng.

Mặc định: false

Đó có vẻ ngược hiệu quả trong đôi mắt của bạn, nhưng lĩnh vực dữ liệu meta có thể chứa nhiều giá trị. Trong trường hợp của bạn, bạn không cần điều đó, nhưng giá trị duy nhất. Giá trị duy nhất là mảng của bạn.

Xem thêm: get user metaCodex

+0

Đúng, bạn đã đúng! Ban đầu tôi đã chọn suy nghĩ sai lầm rằng nó sẽ trả về mảng, như trong mảng giá trị của tôi, nhưng nó sẽ lấy lại một mảng của trường dữ liệu meta. Thay đổi thành true để trả về giá trị và sau đó lưu nó thành một mảng với "maybe_unserialize ($ wp_user_film_prefs_val);" Cảm ơn người đàn ông! – chuuke

+0

Tuyệt vời! cảm ơn bạn! – Magico

+0

Thật khó để suy nghĩ về một mảng như một giá trị duy nhất – henrywright

0

Bạn có xem xét serialize() nó như là một str và lưu trữ này str vào db của bạn, và unserialize() str vào mảng sau khi nhận được từ db?

+0

WordPress thực hiện tuần tự hóa cho bạn sau hậu trường. @harkra đã có câu trả lời đúng. – James

Các vấn đề liên quan