Speichern von PHP-Arrays in der WordPress-Benutzer-Metadatenbank

Lesezeit: 2 Minuten

Benutzeravatar von chuuke
Chuuke

Dies sollte für einen PHP-Experten einfach sein. Ich habe Probleme beim Speichern und Abrufen von Arrays in WordPress über die Funktion update_user_meta.

Also habe ich ein assoziatives Array wie folgt aufgebaut:

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
)

Aber wenn ich diese Daten in der Benutzermetatabelle aktualisiere über:

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

Die Daten werden richtig in die Datenbank eingefügt, aber wenn ich die Daten zurückrufe und das neue Array auf dem Bildschirm drucke, hat es einen verschachtelten Array-Schlüssel von [0] innerhalb des Arrays wie folgt:

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
        )

)

Wie kann ich es dazu bringen, das Array genau wie mein erstes Array zu speichern? Ich ziehe das Metawert-Array über den WP-Befehl:

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

Gibt es etwas, das ich falsch mache? Danke im Voraus!!!

Benutzeravatar von hakre
hakre

Sie müssen den letzten Parameter von einstellen false zu true:

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

Dieser dritte Parameter ist $single:

(boolean) (optional) Bei True Rückgabewert des Metadatenfeldes, bei False Rückgabe eines Arrays.

Standard: falsch

Das mag in Ihren Augen kontraproduktiv klingen, aber das Metadatenfeld kann mehrere Werte enthalten. In Ihrem Fall brauchen Sie das nicht, sondern den einzelnen Wert. Der einzelne Wert ist Ihr Array.

Siehe auch: get user metaKodex

  • Ja, du hattest recht! Ich habe mich anfangs für falsch entschieden, weil ich dachte, dass es dann das Array zurückgeben würde, wie in meinem Array von Werten, aber es wird ein Array des Metadatenfelds neu erstellt. In „true“ geändert, um den Wert zurückzugeben, und dann als Array mit „maybe_unserialize($wp_user_film_prefs_val);“ gespeichert. Danke, Mann!

    – Chuke

    13. Oktober 2011 um 15:55 Uhr

  • Es ist schwer, sich ein Array als einen einzelnen Wert vorzustellen

    – Hendrik Wright

    11. März 2014 um 11:28 Uhr

  • Es ist sicher ein schlechtes API-Design, danke für Ihre Antwort!

    – Maciej Krawczyk

    17. März 2018 um 11:39 Uhr

Hast du überlegt serialize() es als str und speichere diesen str in deiner db, und unserialize() die str in array nach dem Abrufen von db?

  • WordPress erledigt die Serialisierung hinter den Kulissen für Sie. @harkra hatte die richtige Antwort.

    – James

    27. September 2012 um 20:53 Uhr

1394640cookie-checkSpeichern von PHP-Arrays in der WordPress-Benutzer-Metadatenbank

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy