get_post_meta einzeln oder mehrfach aufrufen?

  • Welchem Ansatz würdet ihr bevorzugen und wieso?

    PHP
    $a = get_post_meta( $id, 'custom_field_a', true );
    $b = get_post_meta( $id, 'custom_field_b', true );
    $c = get_post_meta( $id, 'custom_field_c', true );

    Oder...

    PHP
    $var = get_post_meta( $id );
    $a   = $var['custom_field_a'][0];
    $b   = $var['custom_field_b'][0];
    $c   = $var['custom_field_c'][0];

    // wp-styles.de

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Wenn es wirklich nur um die drei Werte geht, würde ich die Variante nehmen, die ich übersichtlicher finde. In dem Fall vermutlich letztere.
    Bei den paar Aufrufen dürfte es für die Performance völlig egal sein.

    Wenn das mit den drei Variablen nur ein Beispiel ist und es in Wirklichkeit um wesentlich mehr Variablen geht, dann würde ich einfach testen, welche von beiden schneller ist.

    Ich weiß, das ist jetzt keine super fundierte Antwort. Aber zumindest prakmatisch ;)

    Alternativ könntest du dir die get_post_meta() auch mal anschauen. Jenachdem, was die alles macht und wie komplex die aufgebaut ist, ist die zweite Variante wahrscheinlich auch die "bessere", weil der Funktionsaufruf nur einmal stattfindet und du danach ja nur noch Variablen zuweist.

  • Klar den ersten, der zweite benötigt jeweils noch ein [FONT=courier new]!empty()[/FONT] oder [FONT=courier new]isset()[/FONT] und [FONT=courier new]is_array()[/FONT] o.ä. pro Variable sonst hagelt es PHP Warnings wenn [FONT=courier new]custom_field_X[/FONT] in einem Post nicht existiert ...

    Einmal editiert, zuletzt von b3317133 (12. Februar 2017 um 22:36)

  • Klar den ersten, der zweite benötigt jeweils noch ein [FONT=courier new]!empty()[/FONT] oder [FONT=courier new]isset()[/FONT] und [FONT=courier new]is_array()[/FONT] o.ä. pro Variable sonst hagelt es PHP Warnings wenn [FONT=courier new]custom_field_X[/FONT] in einem Post nicht existiert ...

    Ok stimmt. Das habe ich nicht bedacht und ist natürlich ein starkes Argument für die erste Variante.
    Es hängt aber natürlich auch davon ab, ob und wie der Inhalt der Variablen im weiteren Verlauf verwendet und überprüft wird. Wenn das eh noch geschieht, wäre es aus meiner Sicht kein Nachteil, dass dann an dieser Stelle gleich mit zu erledigen.
    Mich "stört" halt gefühlt irgendwie der mehrfache Aufruf der Funktion in der ersten Variante.

  • Mehrfacher Aufruf ist kein Problem, [FONT=courier new]get_post_meta()[/FONT] nutzt intern den WordPress Object Cache.

    Und wenn ein Post z.B. sehr viele post meta hat, z.B. durch manche SEO-Plugins, Übersetzungs-Plugins o.ä., dann bekommt man beim Abholen aller Daten auf einmal auch noch viel zu viel zurück.

    Und bzgl. Überprüfung, alleine vor [FONT=courier new]$var['custom_field_b'][0][/FONT] müsste man schon manuell prüfen, ob [FONT=courier new]$var['custom_field_b'][/FONT] überhaupt existiert und dazu noch kein leeres Array ist, bringt unnötige Komplexität rein.

    Einmal editiert, zuletzt von b3317133 (12. Februar 2017 um 23:43)

  • Danke euch beiden! Aus eurer Pro-Contra-Liste kann man viel lernen. Den WP Objekt Cache hatte ich total vergessen. Auch den unnötig hohen Rückgabewert aufgrund Einflüsse Dritter hatte ich nicht auf dem Schirm.

    Aus dem Bauch heraus habe ich zum Mehrfachaufruf tendiert, konnte es bis dato aber nie wirklich begründen.

    // wp-styles.de

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!