A cosa serve extract( shortcode_atts( array( in WordPress?

15 mag 2013, 22:51:36
Visualizzazioni: 47.9K
Voti: 35

Il codex dice

shortcode_atts() combina gli attributi dello shortcode definiti dall'utente con gli attributi conosciuti e riempie i valori predefiniti quando necessario. Il risultato conterrà ogni chiave dagli attributi conosciuti, unita ai valori degli attributi dello shortcode.

Non mi è molto chiaro (sono alle prime armi).

Ecco un esempio:

function wps_trend($atts) {
    extract( shortcode_atts( array(
        'w' => '500',  // larghezza predefinita
        'h' => '330',  // altezza predefinita
        'q' => '',     // query vuota predefinita
        'geo' => 'US', // località geografica predefinita
    ), $atts));
    $h = (int) $h;
    $w = (int) $w;
    $q = esc_attr($geo);
    ob_start();  

Potresti spiegare?

0
Tutte le risposte alla domanda 1
3
44

shortcode_atts() funziona come array_merge(): Unisce il secondo elenco di argomenti nel primo. La differenza è: Unisce solo le chiavi presenti nel primo argomento ($default).

extract() quindi prende le chiavi dell'array, le imposta come nomi di variabili e i loro valori come valori delle variabili. 'w' => '500' nel tuo esempio diventa $w = '500'.

Non usare extract(). Questo è uno stile di codice molto pessimo. Il suo utilizzo è stato deprecato persino nel core, e questo significa qualcosa … :)

Il tuo esempio dovrebbe essere scritto come:

$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'] );
15 mag 2013 22:57:15
Commenti

Grazie. Non conoscevo la funzione extract, grazie anche per questo!

User User
15 mag 2013 23:07:27

extract() è anche sconsigliata dagli standard di codifica di WP. Vedi https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#dont-extract

alexg alexg
17 feb 2016 11:38:02

Attenzione! Non usare extract() su dati non attendibili, come input utente. È insicuro e puoi creare molti conflitti e sovrascrivere parti di codice esistenti. Può essere usato solo in parti di codice veramente, veramente, veramente protette dove sai esattamente cosa aspettarti e cosa ti serve.

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