Apa yang diekstrak (shortcode_atts (array)?


28

Kodeks mengatakan

shortcode_atts()menggabungkan atribut shortcode pengguna dengan atribut yang dikenal dan mengisi default saat diperlukan. Hasilnya akan berisi setiap kunci dari atribut yang dikenal, digabung dengan nilai dari atribut kode pendek.

Tidak masuk akal bagi saya (saya seorang pemula).

Berikut ini sebuah contoh:

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

Bisakah Anda jelaskan?

Jawaban:


35

shortcode_atts()berfungsi seperti array_merge(): Ini menggabungkan daftar argumen kedua menjadi yang pertama. Perbedaannya adalah: Ini hanya menggabungkan kunci yang ada dalam argumen pertama ( $default).

extract()lalu ambil kunci array, tetapkan ini sebagai nama variabel dan nilainya sebagai nilai variabel. 'w' => '500'dalam contoh Anda menjadi $w = '500'.

Jangan gunakan extract(). Gaya kode ini sangat buruk. Penggunaannya sudah usang bahkan dalam inti , dan itu berarti sesuatu ... :)

Contoh Anda harus ditulis sebagai:

$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
Terima kasih. Saya tidak tahu tentang itu extract, jadi terima kasih untuk itu juga!
mattnewbie

5
extract()juga tidak disarankan oleh standar pengkodean WP. Lihat make.wordpress.org/core/handbook/best-practices/…
alexg

Peringatan! Jangan gunakan ekstrak () pada data yang tidak dipercaya, seperti input pengguna. Tidak aman dan Anda dapat membuat banyak konflik dan juga menimpa beberapa kode yang Anda miliki sebelumnya. Itu hanya dapat digunakan di bagian kode yang benar-benar dilindungi, di mana Anda akan tahu apa yang diharapkan dan apa yang Anda butuhkan.
Ivijan Stefan Stipić
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.