default_(meta_type)_metadata
Позволяет изменить значение по умолчанию для метаполя записи, термина таксономии, пользователя или комментария.
Динамическая часть имени хука, (meta_type) - это название типа объекта метаполя. Т.е. этот хук может иметь следующие названия:
Использование
add_filter( 'default_(meta_type)_metadata', 'wp_kama_default_meta_type_metadata_filter', 10, 5 );
/**
* Function for `default_(meta_type)_metadata` filter-hook.
*
* @param mixed $value The value to return, either a single metadata value or an array of
* values depending on the value of `$single`.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param bool $single Whether to return only the first value of the specified `$meta_key`.
* @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment',
* 'term', 'user', or any other object type with an associated meta table.
*
* @return mixed
*/
function wp_kama_default_meta_type_metadata_filter( $value, $object_id, $meta_key, $single, $meta_type ){
// filter...
return $value;
}
- $value(разное)
- Дефолтное значение, которое нужно вернуть. Может быть строкой или массивом, зависит от параметра
$single. - $object_id(int)
- ID объекта метаданных: ID поста, термина, комментария, юзера.
- $meta_key(string)
- Название метаполя (ключ метаполя).
- $single(true|false)
- Как было запрошено получение значений. См. аналогичный параметр в функции get_post_meta().
- $meta_type(строка)
- Тип объекта, к которому принадлежит метаполе. Может быть:
post,comment,term,userили любой другой тип, если вы создавали поля для произвольной таблицы.
Примеры
#1 Укажем дефолтное значение просмотров, когда у поста еще нет просмотров
Допустим, количество просмотров поста хранится в метаполе views, и мы хотим, чтобы, когда у поста ещё нет ни одного просмотра, выводилось какое-то число, а не 0. Чтобы подогреть интерес читателей к статье.
Но при этом мы не хотим реально изменять значение поля views, то есть если просмотры есть, то выводятся они, а если их вообще нет, то нужно выводить, например, 10.
Мы можем тут использовать случайное число, чтобы у всех постов не было одинакового количества просмотров, но тогда это число всегда будет меняться — этого нам тоже не нужно. Поэтому давайте возьмём две последние цифры ID поста и будем выдавать их за количество просмотров.
# Укажем дефолтное значение просмотров, когда у поста еще нет просмотров
add_filter( 'default_post_metadata', 'default_post_views_meta_value', 10, 5 );
function default_post_views_meta_value( $value, $object_id, $meta_key, $single, $meta_type ){
if( 'views' === $meta_key && 'post' === $meta_type ){
// if 00 show 10
$value = (int) substr( $object_id, -2 ) ?: 10;
}
return $value;
}
#2 Подстановка дефолтного изображения
Этот код добавляет поддержку дефолтного изображения для сборов в плагине Лейка, если пользователь не загрузил своё.
Используется ACF, в котором админ указывает эти дефолтные картинки для каждого типа сбора (день рождения, спорт и так далее).
Код вырван из контекста и показывает лишь возможности фильтра.
-
Фильтр
default_post_metadata- Срабатывает при получении метаданных поста.
- Проверяет, что запрашивается именно
_thumbnail_id(ID изображения). - Убедившись, что пост относится к типу
leyka_campaign, получает его категорию (тип сбора). - Возвращает ID дефолтного изображения, соответствующего этой категории.
- Функция
get_campaign_default_image_id()- Получает список дефолтных изображений, заданных администратором в ACF (поле
global_default_campaign_images). - Если для нужного типа (
birthday,masterclass,sport,other) задано изображение — возвращает его ID. - Если нет — возвращает
0.
- Получает список дефолтных изображений, заданных администратором в ACF (поле
Таким образом, если у сбора нет собственного изображения, будет использовано дефолтное, заданное в настройках.
add_filter( "default_post_metadata", function ( $value, $post_id, $meta_key, $single ) {
if ( $meta_key !== '_thumbnail_id' ) {
return $value;
}
if ( 'leyka_campaign' !== get_post_type( $post_id ) ) {
return $value;
}
$type = get_campaign_type( 'key', $post_id );
return get_campaign_default_image_id( $type );
}, 10, 4 );
/**
* Получает ID дефолтного изображения сбора.
* Дефолтные фото для этого указываются в админке в настройках.
*
* @param string $type Тип изображения (может быть birthday, masterclass, sport, other).
*
* @return int
*/
function get_campaign_default_image_id( string $type ): int {
$image_ids = get_field( 'global_default_campaign_images', 'option' );
if ( ! empty( $image_ids[ $type ] ) ) {
return absint( $image_ids[ $type ] );
}
return 0;
}Список изменений
| С версии 5.5.0 | Введена. |
Где вызывается хук
$value = apply_filters( "default_{$meta_type}_metadata", $value, $object_id, $meta_key, $single, $meta_type );
Где используется хук в WordPress
add_filter( "default_{$object_type}_metadata", 'filter_default_metadata', 10, 5 );