Co wyodrębnia (shortcode_atts (array (do?

28

Kodeks mówi

shortcode_atts()łączy atrybuty shortcode użytkownika ze znanymi atrybutami i wypełnia wartości domyślne w razie potrzeby. Wynik będzie zawierał każdy klucz ze znanych atrybutów, połączony z wartościami z atrybutów shortcode.

To nie ma dla mnie większego sensu (jestem nowicjuszem).

Oto przykład:

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

Czy możesz wyjaśnić?

mattnewbie
źródło

Odpowiedzi:

35

shortcode_atts()działa jak array_merge(): Łączy drugą listę argumentów w pierwszą. Różnica polega na: Łączy tylko klucze obecne w pierwszym argumencie ( $default).

extract()następnie bierze klucze tablicy, ustawia je jako nazwy zmiennych, a ich wartości jako wartości zmiennych. 'w' => '500'w twoim przykładzie staje się $w = '500'.

Nie używać extract(). Ten bardzo zły styl kodu. Jego użycie było przestarzałe nawet w rdzeniu , a to oznacza coś… :)

Twój przykład powinien być napisany jako:

$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
źródło
1
Dziękuję Ci. Nie wiedziałem o tym extract, więc też dziękuję za to!
mattnewbie
5
extract()odradzają również standardy kodowania WP. Zobacz make.wordpress.org/core/handbook/best-practices/…
alexg
Ostrzeżenie! Nie używaj metody extract () dla niezaufanych danych, takich jak dane wejściowe użytkownika. Jest niepewny i możesz popełnić wiele konfliktów, a także zastąpić niektóre kody wcześniej. Tego można użyć tylko w jakiejś naprawdę, naprawdę, naprawdę chronionej części kodu, w której będziesz wiedział, czego się spodziewasz i czego potrzebujesz.
Ivijan Stefan Stipić