Que fait extract (shortcode_atts (array (do?

28

Le codex dit

shortcode_atts()combine des attributs de shortcode utilisateur avec des attributs connus et remplit les valeurs par défaut en cas de besoin. Le résultat contiendra chaque clé des attributs connus, fusionnée avec les valeurs des attributs de shortcode.

Cela n'a pas beaucoup de sens pour moi (je suis un débutant).

Voici un exemple:

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();  

Pouvez-vous expliquer?

mattnewbie
la source

Réponses:

35

shortcode_atts()fonctionne comme array_merge(): Il fusionne la deuxième liste d'arguments dans le premier. La différence est la suivante: il fusionne uniquement les clés présentes dans le premier argument ( $default).

extract()prend ensuite les clés du tableau, les définit comme noms de variables et leurs valeurs comme valeurs de variables. 'w' => '500'dans votre exemple devient $w = '500'.

Ne pas utiliser extract(). Ce très mauvais style de code. Son utilisation était déconseillée même dans le noyau , et cela signifie quelque chose… :)

Votre exemple doit être écrit comme suit:

$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'] );
fuxia
la source
1
Je vous remercie. Je ne connaissais pas le extract, alors merci aussi!
mattnewbie
5
extract()est également découragé par les normes de codage WP. Voir make.wordpress.org/core/handbook/best-practices/…
alexg
Attention! N'utilisez pas extract () sur des données non fiables, comme les entrées utilisateur. N'est pas sécurisé et vous pouvez créer de nombreux conflits et écraser également certains codes que vous avez auparavant. Cela ne peut être utilisé que dans une partie du code vraiment, vraiment, vraiment protégée, où vous saurez ce qui est attendu et ce dont vous avez besoin.
Ivijan Stefan Stipić