Що означає витяг (shortcode_atts (масив (робити?)


28

Кодекс говорить

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 Stefan Stipić
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.