Что делает извлечение (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

Предупреждение! Не используйте extract () для ненадежных данных, таких как пользовательский ввод. Это небезопасно, и вы можете сделать много конфликтов, а также перезаписать некоторые коды, которые у вас были раньше. Это можно использовать только в какой-то действительно защищенной части кода, где вы будете знать, что ожидается и что вам нужно.
Ивиян Стефан Стипич
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.