O que extrai (shortcode_atts (array (do?

28

O códice diz

shortcode_atts()combina atributos de código de acesso do usuário com atributos conhecidos e preenche os padrões quando necessário. O resultado conterá todas as chaves dos atributos conhecidos, mescladas com os valores dos atributos de shortcode.

Não faz muito sentido para mim (eu sou um novato).

Aqui está um exemplo:

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

Por favor, você pode explicar?

mattnewbie
fonte

Respostas:

35

shortcode_atts()funciona assim array_merge(): mescla a segunda lista de argumentos na primeira. A diferença é: ele mescla apenas as chaves presentes no primeiro argumento ( $default).

extract()depois pega as chaves da matriz, define-as como nomes de variáveis ​​e seus valores como valores de variáveis. 'w' => '500'no seu exemplo se torna $w = '500'.

Não use extract(). Esse estilo de código muito ruim. Seu uso foi preterido, mesmo no núcleo , e isso significa algo… :)

Seu exemplo deve ser escrito como:

$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
fonte
11
Obrigado. Eu não sabia sobre o extract, então obrigado por isso também!
mattnewbie
5
extract()também é desencorajado pelos padrões de codificação WP. Veja make.wordpress.org/core/handbook/best-practices/…
alexg
Atenção! Não use extract () em dados não confiáveis, como entrada do usuário. É inseguro e você pode ter muitos conflitos e também substituir alguns códigos do que tinha antes. Isso só pode ser usado em algumas partes do código realmente protegidas, onde você saberá o que é esperado e o que precisa.
Ivijan Stefan Stipić