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)
- Объект текущей записи.
Примеры
#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 | Введена. |
Где вызывается хук
postmeta_form_keys
wp-admin/includes/template.php 707
$keys = apply_filters( 'postmeta_form_keys', null, $post );