postmeta_form_keysхук-фильтрWC 6.9.0

Это хук WordPress - postmeta_form_keys. Плагин его просто использует.

Позволяет изменить набор метаполей в выпадающем списке метабокса "Произвольные поля".

Пример выпадающего списка

Если фильтр вернёт значение отличное от null, например, пустой массив или массив со строками, то базовый запрос по сбору всех названий метаполей записей для выпадающего списка будет отменен, а его результат будет заменен на то что вернулось в фильтре.

Массив ключей перед выводом пропускается через функцию сортировки natcasesort().

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

add_filter( 'postmeta_form_keys', 'wp_kama_postmeta_form_keys_filter', 10, 2 );

/**
 * Function for `postmeta_form_keys` filter-hook.
 * 
 * @param array|null $keys Pre-defined meta keys to be used in place of a postmeta query.
 * @param WP_Post    $post The current post object.
 *
 * @return array|null
 */
function wp_kama_postmeta_form_keys_filter( $keys, $post ){

	// filter...
	return $keys;
}
$keys(массив/null)
Названия метаполей (ключи, колонка meta_key таблицы wp_postmeta), которые необходимо отобразить в выпадающем списке.
По умолчанию: null
$post(WP_Post)
Объект текущей записи.

Примеры

0

#1 Запретим получение ключей всех метаполей записей

add_filter( 'postmeta_form_keys', '__return_empty_array' );
0

#2 Укажем жёстко ключи для отображения в выпадающем списке

Укажем для всех cpt предустановленный список ключей метаполей:

add_filter( 'postmeta_form_keys', 'filter_postmeta_form_keys' );

function filter_postmeta_form_keys(){
	return [ 'key_field_1', 'key_field_2' ];
}
0

#3 Совместим ключи для отображения в выпадающем списке

Предусмотрим, что фильтр может вызываться в разных участках кода и добавлять ключи метаполей в общий пул ключей. Также ключи могут дублироваться и поэтому надо их очищать от двойников.

add_filter( 'postmeta_form_keys', 'filter_1_postmeta_form_keys' );
add_filter( 'postmeta_form_keys', 'filter_2_postmeta_form_keys' );

function filter_1_postmeta_form_keys( $keys ) {

	$my_keys = [ 'key_field_1', 'key_field_2' ];
	$keys    = array_merge( (array) $keys, $my_keys );

	return array_unique( $keys );
}

function filter_2_postmeta_form_keys( $keys ) {

	$my_keys = [ 'key_field_2', 'key_field_3' ];
	$keys    = array_merge( (array) $keys, $my_keys );

	return array_unique( $keys );
}

Результат:

0

#4 Укажем ключи только для ctp=product

add_filter( 'postmeta_form_keys', 'filter_postmeta_form_keys', 10, 2 );

function filter_postmeta_form_keys( $keys, $post ) {
	if ( 'product' === get_post_status( $post ) ) {
		$keys = [ 'stock', 'sale' ];
	}

	return $keys;
}

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

С версии 6.9.0 Введена.

Где вызывается хук

CustomMetaBox::render_meta_form()
postmeta_form_keys
woocommerce/src/Internal/Admin/Orders/MetaBoxes/CustomMetaBox.php 129
$keys = apply_filters( 'postmeta_form_keys', $keys, $order );

Где используется хук в WooCommerce

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