Cosa estrae (shortcode_atts (array (fare?


28

Il codice dice

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

Non ha molto senso per me (sono un principiante).

Ecco un esempio:

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

Per favore, puoi spiegare?

Risposte:


35

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 di variabili. 'w' => '500'nel tuo esempio diventa $w = '500'.

Non usare extract(). Questo pessimo stile di codice. Il suo utilizzo è stato deprecato anche 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'] );

1
Grazie. Non ne sapevo nulla extract, quindi grazie anche per quello!
Mattnewbie,

5
extract()è inoltre scoraggiato dagli standard di codifica WP. Vedi make.wordpress.org/core/handbook/best-practices/…
alexg

Avvertimento! Non utilizzare extract () su dati non attendibili, come l'input dell'utente. Non è sicuro e puoi creare molti conflitti e anche sovrascrivere alcuni codici che hai prima. Questo può essere utilizzato solo in alcune parti del codice veramente, davvero, davvero protette, dove saprai cosa ti aspetti e cosa ti servono.
Ivijan Stefan Stipić,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.