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

postmeta_form_keys хук-фильтр . WP 4.4.0

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

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

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

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

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

add_filter( 'postmeta_form_keys', 'filter_function_name_9057', 10, 2 );
function filter_function_name_9057( $keys, $post ){
	// Фильтруем...

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

Примеры

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

add_filter( 'postmeta_form_keys', '__return_empty_array' );

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

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

add_filter( 'postmeta_form_keys', 'filter_postmeta_form_keys' );

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

#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 );
}

Результат:

#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;
}

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

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

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

meta_form()
postmeta_form_keys
wp-admin/includes/template.php 680
$keys = apply_filters( 'postmeta_form_keys', null, $post );

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

Использование не найдено.
campusboy 3542youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Редакторы: Kama 7748
Комментариев нет