Ekstresi ne yapar (shortcode_atts (array (yapar?)


28

Kodeks diyor ki

shortcode_atts()kullanıcı kısa kod özelliklerini bilinen özelliklerle birleştirir ve gerektiğinde varsayılanları doldurur. Sonuç, bilinen özelliklerden gelen her anahtarı, kısa kod özelliklerinden gelen değerlerle birleştirilecektir.

Bana mantıklı gelmiyor (ben acemiyim).

İşte bir örnek:

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

Lütfen açıklayabilir misiniz?

Yanıtlar:


35

shortcode_atts()Şunun gibi çalışır array_merge(): İkinci argüman listesini birinciye birleştirir. Fark şudur: Yalnızca ilk argümanda ( $default) bulunan anahtarları birleştirir .

extract()sonra dizi anahtarlarını alır, bunları değişken isimleri olarak ve bunların değerlerini değişken değerleri olarak ayarlar. 'w' => '500'senin örneğinde olur $w = '500'.

Kullanmayın extract(). Bu çok kötü kod tarzı. Kullanımı özünde bile kullanımdan kaldırıldı ve bu bir şey ifade ediyor… :)

Örneğiniz şöyle yazılmalıdır:

$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
Teşekkür ederim. Ben bilmiyordum extract, bunun için de teşekkürler!
mattnewbie

5
extract()WP kodlama standartları tarafından da önerilmektedir. Bkz make.wordpress.org/core/handbook/best-practices/...
alexg

Uyarı! Ekstresi (), kullanıcı girişi gibi güvenilir olmayan veriler üzerinde kullanmayın. Güvensiz ve birçok çatışma yapabilir ve ayrıca önceden sahip olduğunuz kodların üzerine yazabilirsiniz. Bu sadece bazı, gerçekten, gerçekten, gerçekten ne korumanızı ve neye ihtiyacınız olduğunu bileceğiniz kodun korumalı bir kısmında kullanılabilir.
Ivijan Stefan Stipić,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.