Trích xuất gì (shortcode_atts (mảng (làm gì?


28

Bộ luật nói

shortcode_atts()kết hợp các thuộc tính shortcode của người dùng với các thuộc tính đã biết và điền vào mặc định khi cần. Kết quả sẽ chứa mọi khóa từ các thuộc tính đã biết, được hợp nhất với các giá trị từ các thuộc tính shortcode.

Nó không có ý nghĩa nhiều với tôi (Tôi là người mới).

Đây là một ví dụ:

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

Xin vui lòng giải thích?

Câu trả lời:


35

shortcode_atts()hoạt động như array_merge(): Nó hợp nhất danh sách đối số thứ hai vào đối số thứ nhất. Sự khác biệt là: Nó chỉ hợp nhất các khóa có trong đối số đầu tiên ( $default).

extract()sau đó lấy các khóa mảng, đặt chúng làm tên biến và giá trị của chúng làm giá trị biến. 'w' => '500'trong ví dụ của bạn trở thành $w = '500'.

Không sử dụng extract(). Kiểu mã rất xấu này. Cách sử dụng của nó không được chấp nhận ngay cả trong cốt lõi , và điều đó có nghĩa là một thứ gì đó :)

Ví dụ của bạn nên được viết là:

$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
Cảm ơn bạn. Tôi không biết về điều đó extract, vì vậy cũng cảm ơn vì điều đó!
mattnewbie

5
extract()cũng không được khuyến khích bởi các tiêu chuẩn mã hóa WP. Xem make.wordpress.org/core/handbook/best-practices/ từ
alexg 17/2/2016

Cảnh báo! Không sử dụng giải nén () trên dữ liệu không tin cậy, như đầu vào của người dùng. Không an toàn và bạn có thể tạo ra rất nhiều xung đột và cũng ghi đè lên một số mã những gì bạn có trước đây. Điều đó chỉ có thể được sử dụng trong một phần mã thực sự, thực sự, được bảo vệ thực sự, nơi bạn sẽ biết những gì mong đợi và những gì bạn cần.
Ivijan Stefan Stipić
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.