สารสกัดอะไร (shortcode_atts (อาร์เรย์ (ทำ)


28

Codex พูดว่า

shortcode_atts()รวมคุณลักษณะรหัสย่อผู้ใช้เข้ากับแอตทริบิวต์ที่รู้จักและเติมในค่าเริ่มต้นเมื่อต้องการ ผลลัพธ์จะมีทุกคีย์จากแอททริบิวที่รู้จักรวมกับค่าจากแอททริบิวรหัสย่อ

มันไม่สมเหตุสมผลสำหรับฉัน (ฉันเป็นมือใหม่)

นี่คือตัวอย่าง:

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

คุณช่วยอธิบายได้มั้ย

คำตอบ:


35

shortcode_atts()ทำงานเหมือนarray_merge(): มันรวมรายการที่สองของการขัดแย้งลงในรายการแรก ข้อแตกต่างคือ: มันรวมเฉพาะคีย์ที่มีอยู่ในอาร์กิวเมนต์แรก ( $default)

extract()จากนั้นใช้คีย์อาร์เรย์ตั้งค่าเหล่านี้เป็นชื่อตัวแปรและค่าของมันเป็นค่าตัวแปร ในตัวอย่างของคุณจะกลายเป็น'w' => '500'$w = '500'

extract()อย่าใช้ สไตล์โค้ดนี้แย่มาก การใช้งานของมันเลิกใช้แล้วแม้แต่ในแกนกลางและนั่นหมายความว่า… :)

ตัวอย่างของคุณควรเขียนเป็น:

$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
ขอขอบคุณ. ฉันก็ไม่รู้เหมือนextractกันดังนั้นขอบคุณสำหรับสิ่งนั้นด้วย!
mattnewbie

5
extract()ถูกกีดกันด้วยมาตรฐานการเข้ารหัส WP ดูmake.wordpress.org/core/handbook/best-practices/ …
alexg

คำเตือน! อย่าใช้สารสกัด () กับข้อมูลที่ไม่น่าเชื่อถือเช่นการป้อนข้อมูลของผู้ใช้ ไม่ปลอดภัยและคุณสามารถสร้างความขัดแย้งมากมายและเขียนทับรหัสบางอย่างที่คุณมีก่อนหน้านี้ สามารถใช้งานได้เฉพาะในส่วนที่ได้รับการป้องกันจริงๆของรหัสที่คุณจะรู้ว่าสิ่งที่คาดหวังและสิ่งที่คุณต้องการ
Ivijan Stefan Stipić
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.