WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_parse_args() WP 2.2

Объединяет два массива, так что параметры первого массива (передаваемые) заменяют при совпадении параметры второго массива (по умолчанию). Параметры можно указать строкой.

Обычно в функцию передается массив с новыми параметрами и массив с параметрами по умолчанию и функция их объединяет. В первом аргументе можно передать параметры в виде строки: text=текст&foo=нечто, они будут преобразованы в массив.

Эта функция часто используется в других функция WordPress, в которых подразумеваются параметры по умолчанию и передаваемые параметры, к таким функциям можно отнести get_posts(), wp_list_comments(), get_terms().

Функцию рекомендуется использовать в создаваемых функциях, в которые передается список параметров. Если определять каждый параметр отдельно как это принято при регистрации функции, то список параметров может быть очень длинным и неудобным. В таких случаях удобнее указать для функции один параметр $args и внутри функции в массиве указать параметры по-умолчанию. Затем обработать передаваемый параметр с помощью wp_parse_args(), тем самым объединив передаваемые параметры с дефолтными (см. первый пример).

Является основой для: register_rest_field()
Работает на основе: wp_parse_str()
✈ 1 раз = 0.000018с = очень быстро | 50000 раз = 0.08с = скорость света | PHP 7.1.5, WP 4.8.2

Хуков нет.

Возвращает

Массив данных.

Использование

$args = wp_parse_args( $args, $defaults );
$args(строка/массив/объект) (обязательный)

Массив параметров или строка параметров, которые перезапишут при совпадении параметры по умолчанию.

Строка передается в формате строки запроса УРЛ:

$args = 'type=post&posts_per_page=5&cat=1';

Массив передается как обычно:

$args = array( 'type'=>'post', 'posts_per_page'=>5, 'cat'=>'1' )

Если передать какой-то объект, то функция получит все его свойства. Свойства станут массивом параметров.

$args = (object) array( 'type'=>'post', 'posts_per_page'=>5, 'cat'=>'1' )
$defaults(массив)

Массив параметров по умолчанию, которые будут заменены на параметры передаваемые в $args.

По умолчанию: ''

Примеры

#1 Передача параметров функции и установка дефолтных

Этот пример показывает как с помощью функции wp_parse_args() указать параметры функции по умолчанию и заменять их если передан параметр с таким же ключом.

function foo( $args ){
	// определим параметры по умолчанию
	$defaults = array(
		'param1' => 'значение',
		'param2' => true,
	);

	$args = wp_parse_args( $args, $defaults );
}

// вызовем функцию 
foo( 'param1=значение&param2=0' );

// или так
foo( array(
	'param1' => 'нечто',
	'param2' => 0,
) );

#2 Пример использования wp_parse_args

wp_parse_args() используется внутри функции, для определения передаваемые в функцию параметров. Этот пример показывает как передаваемые параметры объединяются с параметрами по умолчанию:

// определим параметры по умолчанию
$defaults = array(
	'type' => 'post',
	'before' => "<p>",
	'after' => "</p> \n",
	'echo' => TRUE
);

// объединим переданные параметры в $args с параметрами по умолчанию 
$args = wp_parse_args( $args, $defaults );

#2 Демонстрация работы

В этом примере создадим функцию, которая использует wp_parse_args() и вызовем её в разных вариантах:

/**
 * Определим новую функцию
 */
function explain_parse_args( $args ) {
	$defaults = array(
		'text'   => 'wp_parse_args() объединим $args и $defaults',
		'before' => "<p>",
		'after'  => "</p> \n",
		'echo'   => TRUE
	);

	// Получим входящие параметры и сравним их с базовыми
	$args = wp_parse_args( $args, $defaults );

	$output = $args['before'] . $args['text'] . $args['after'];

	if ( ! $echo ) 
		return $output;

	echo $output;
}

/**
 * Вызовем функцию без параметров
 * В результате получим: 
 * <p>wp_parse_args() объединим $args и $defaults</p> \n
 */
explain_parse_args();

/**
 * Вызовем функцию и укажем параметры в виде массива
 * Получим:
 * <p class='specialclass'>Лучшее предложение</p> \n
 */
explain_parse_args( array (
	'text' => "Лучшее предложение",
	'before' => "<p class='specialclass'>"
) );

/**
 * Вызовем функции и передадим параметры строкой 
 * Получим:
 * <p></p> \n
 */
explain_parse_args( 'echo=1&text=0' );

Список изменений

С версии 2.2.0 Введена.
С версии 2.3.0 $args can now also be an object.

Код wp parse args: wp-includes/functions.php WP 5.2.4

<?php
function wp_parse_args( $args, $defaults = '' ) {
	if ( is_object( $args ) ) {
		$r = get_object_vars( $args );
	} elseif ( is_array( $args ) ) {
		$r =& $args;
	} else {
		wp_parse_str( $args, $r );
	}

	if ( is_array( $defaults ) ) {
		return array_merge( $defaults, $r );
	}
	return $r;
}

Cвязанные функции

Из раздела: Вспомогательные

2 коммента
  • // Определим переменные: $type, $before и т.д.
    extract( $args, EXTR_SKIP );

    И в то же время на https://wp-kama.ru/id_8454/wp-php-standarts.html#operator-podavleniya-oshibok

    По мотивам тикета #22400. extract() это ужасная функция, которая сильно усложняет отладку кода, также сильно усложняет читаемость и понимание кода. Поэтому никогда не используйте extract(), кроме случаев когда без неё не обойтись, т.е. никогда!

    p.s. Я не зануда, за пример спасибо, просто хотелось бы комментарии по поводу использования extract()

    Ответить5 мес назад #
    • Kama7631

      Старый пример, бородатый, когда-то и в ядре ВП экстракты были, поправил код. Спасибо за коммент! thank_you

      Ответить3 мес назад #
Здравствуйте, !     Войти . Зарегистрироваться