¿Qué extrae (shortcode_atts (array (do?


28

El códice dice

shortcode_atts()combina atributos de shortcode de usuario con atributos conocidos y completa los valores predeterminados cuando es necesario. El resultado contendrá todas las claves de los atributos conocidos, combinados con valores de atributos de código corto.

No tiene mucho sentido para mí (soy un novato).

Aquí hay un ejemplo:

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, ¿puedes explicar?

Respuestas:


35

shortcode_atts()funciona como array_merge(): combina la segunda lista de argumentos en la primera. La diferencia es: combina solo las claves presentes en el primer argumento ( $default).

extract()luego toma las claves de la matriz, las configura como nombres de variables y sus valores como valores de variables. 'w' => '500'en tu ejemplo se convierte $w = '500'.

No utilice extract(). Este muy mal estilo de código. Su uso fue desaprobado incluso en el núcleo , y eso significa algo ... :)

Su ejemplo debe escribirse 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'] );

1
Gracias. No sabía sobre el extract, así que gracias por eso también!
mattnewbie

55
extract()También está desalentado por los estándares de codificación WP. Ver make.wordpress.org/core/handbook/best-practices/…
alexg

¡Advertencia! No use extract () en datos no confiables, como la entrada del usuario. No es seguro y puede generar muchos conflictos y también sobrescribir algunos códigos que tenía antes. Eso solo se puede usar en alguna parte del código realmente, realmente protegida, donde sabrá lo que se espera y lo que necesita.
Ivijan Stefan Stipić
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.