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ć?

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'] );

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ć
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.