default_(meta_type)_metadataхук-фильтрWP 5.5.0

Позволяет изменить значение по умолчанию для метаполя записи, термина таксономии, пользователя, комментариев.

Динамическая часть имени хука, (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, или любой другой тип, если вы создавали поля для произвольной таблицы.

Примеры

0

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

#2 Подстановка дефолтного изображения

Этот код добавляет поддержку дефолтного изображения для сборов в плагине Лейка, если пользователь не загрузил своё.

Используется ACF, в котором админ указывает эти дефолтные картинки для каждого типа сбора (день рождение, спорт и так далее).

Код вырван из контекста и показывает лишь возможности фильтра.

  1. Фильтр default_post_metadata

    • Срабатывает при получении метаданных поста.
    • Проверяет, что запрашивается именно _thumbnail_id (ID изображения).
    • Убедившись, что пост относится к типу leyka_campaign, получает его категорию (тип сбора).
    • Возвращает ID дефолтного изображения, соответствующего этой категории.
  2. Функция get_campaign_default_image_id()
    • Получает список дефолтных изображений, заданных администратором в ACF (поле global_default_campaign_images).
    • Если для нужного типа (birthday, masterclass, sport, other) задано изображение — возвращает его ID.
    • Если нет — возвращает 0.

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

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 Введена.

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

get_metadata_default()
default_(meta_type)_metadata
wp-includes/meta.php 743
$value = apply_filters( "default_{$meta_type}_metadata", $value, $object_id, $meta_key, $single, $meta_type );

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

wp-includes/meta.php 1551
add_filter( "default_{$object_type}_metadata", 'filter_default_metadata', 10, 5 );