Was macht extract (shortcode_atts (array (do?


28

Der Kodex sagt

shortcode_atts()Kombiniert Benutzer-Shortcode-Attribute mit bekannten Attributen und fügt bei Bedarf Standardwerte ein. Das Ergebnis enthält alle Schlüssel aus den bekannten Attributen, die mit Werten aus Shortcode-Attributen zusammengeführt werden.

Es macht für mich nicht viel Sinn (ich bin ein Neuling).

Hier ist ein Beispiel:

function wps_trend($atts) {
extract( shortcode_atts( array(
'w' => '500', 
'h' => '330',
'q' => '',
'geo' => 'US',
), $atts));
$h = (int) $h;
$w = (int) $w;
$q = esc_attr($geo);
ob_start();  

Kannst du das bitte erklären?

Antworten:


35

shortcode_atts()Funktioniert wie array_merge()folgt: Die zweite Liste der Argumente wird mit der ersten zusammengeführt. Der Unterschied ist: Es werden nur die Schlüssel zusammengeführt, die im ersten Argument ( $default) vorhanden sind.

extract()Nimmt dann die Array-Schlüssel, setzt diese als Variablennamen und deren Werte als Variablenwerte. 'w' => '500'in deinem beispiel wird $w = '500'.

Nicht verwenden extract(). Dieser sehr schlechte Codestil. Seine Verwendung war sogar im Kern veraltet , und das bedeutet etwas… :)

Ihr Beispiel sollte so geschrieben sein:

$args = shortcode_atts( 
    array(
        'w'   => '500',
        'h'   => '330',
        'q'   => '',
        'geo' => 'US',
    ), 
    $atts
);
$w = (int) $args['w'];
$h = (int) $args['h'];
$q = esc_attr( $args['q'] );

1
Vielen Dank. Ich wusste nichts über das extract, also danke auch dafür!
Mattnewbie

5
extract()wird auch von WP-Codierungsstandards abgeraten. Siehe make.wordpress.org/core/handbook/best-practices/…
alexg

Warnung! Verwenden Sie nicht extract () für nicht vertrauenswürdige Daten, wie z. B. Benutzereingaben. Ist unsicher und Sie können viele Konflikte machen und auch einige Codes überschreiben, was Sie vorher haben. Das kann nur in einigen wirklich, wirklich, wirklich geschützten Teilen des Codes verwendet werden, in denen Sie wissen, was erwartet wird und was Sie brauchen.
Ivijan Stefan Stipić
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.