¿Qué hace extract( shortcode_atts( array( ?

15 may 2013, 22:51:36
Vistas: 47.9K
Votos: 35

El codex dice

shortcode_atts() combina los atributos del shortcode del usuario con los atributos conocidos y completa los valores predeterminados cuando es necesario. El resultado contendrá cada clave de los atributos conocidos, fusionada con valores de los atributos del shortcode.

No tiene mucho sentido para mí (soy principiante).

Aquí hay un ejemplo:

function wps_trend($atts) {
    extract( shortcode_atts( array(
        'w' => '500', // ancho predeterminado
        'h' => '330', // alto predeterminado
        'q' => '',    // consulta vacía por defecto
        'geo' => 'US', // geografía predeterminada
    ), $atts));
    $h = (int) $h;
    $w = (int) $w;
    $q = esc_attr($geo);
    ob_start();  

¿Podrían explicarlo por favor?

0
Todas las respuestas a la pregunta 1
3
44

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

extract() luego toma las claves del array, las establece como nombres de variables y sus valores como valores de las variables. En tu ejemplo, 'w' => '500' se convierte en $w = '500'.

No uses extract(). Es un estilo de código muy malo. Su uso fue desaprobado incluso en el núcleo de WordPress, y eso significa algo... :)

Tu ejemplo debería escribirse así:

$args = shortcode_atts( 
    array(
        'w'   => '500', // Ancho 
        'h'   => '330', // Alto
        'q'   => '',    // Consulta
        'geo' => 'US',   // Geografía
    ), 
    $atts // Atributos del shortcode
);
// Asignamos variables con tipo seguro
$w = (int) $args['w'];       // Convertir a entero
$h = (int) $args['h'];       // Convertir a entero  
$q = esc_attr( $args['q'] ); // Escapar atributo
15 may 2013 22:57:15
Comentarios

Gracias. No conocía la función extract, ¡así que gracias por eso también!

User User
15 may 2013 23:07:27

extract() también está desaconsejada por los estándares de codificación de WP. Ver https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#dont-extract

alexg alexg
17 feb 2016 11:38:02

¡Advertencia! No uses extract() con datos no confiables, como entradas de usuario. Es inseguro y puede causar muchos conflictos, además de sobrescribir código que hayas escrito antes. Solo debe usarse en partes del código realmente, realmente protegidas donde sepas exactamente qué esperar y qué necesitas.

Ivijan Stefan Stipić Ivijan Stefan Stipić
13 abr 2017 18:02:16