WordPress. Произвольные поля. Часть 2 из 2

15.08.2019

Теги: CMSWeb-разработкаWordPressМетаДанные

Если название мета-поля начинается с нижнего подчеркивания, например _edit_time, то такое поле считается защищенным — используется для внутренних целей WordPress. Такие защищенные поля не выводятся в блоке мета-полей при редактировании записи. Проверить, является ли поле защищенным, можно с помощью функции is_protected_meta().

is_protected_meta(
    $meta_key, // ключ метаполя, которое нужно проверить
    $meta_type // тип метаполя: post, user, comment, term
);
function is_protected_meta($meta_key, $meta_type = null) {
    $protected = ('_' == $meta_key[0]);
    return apply_filters('is_protected_meta', $protected, $meta_key, $meta_type);
}

С помощью фильтра is_protected_meta можно показать защищенные поля в блоке мета-полей при редактировании записи:

add_filter(
    'is_protected_meta',
    function($protected, $meta_key, $meta_type) {
        // показываем скрытые поля для постов и страниц
        if ($meta_type == 'post') {
            return false;
        }
    },
    20,
    3
);

Как изменять значения мета-полей

Функция update_post_meta()

Либо обновляет значение указанного мета-поля для указанного поста, либо добавляет новое, если поля не существует.

update_post_meta(
    $post_id,        // идентификатор записи, мета-поле которого нужно изменить
    $meta_key,       // ключ мета-поля, значение которого нужно изменить
    $meta_value,     // устанавливаемое значение мета-поля
    $prev_value = '' // предыдущее значение мета-поля
);

Если пост содержит несколько значений для одного и того же ключа и при этом если указан параметр $prev_value, будет обновлено первое найденное значение.

Функция add_post_meta()

Добавляет мета-поле с указанным ключом для указанного поста.

add_post_meta(
    $post_id,        // идентификатор записи, мета-поле к которому нужно добавить
    $meta_key,       // ключ мета-поля, которое нужно добавить
    $meta_value,     // устанавливаемое значение мета-поля
    $unique = false  // это уникальное мета-поле?
);

Если установить параметр $unique в true, то при добавлении поля, сначала будет проверяться существует ли уже поле с таким же ключом, если существует, то поле не будет добавлено.

Функция delete_post_meta()

Удаляет указанное мета-поле для указанного поста.

delete_post_meta(
    $post_id,   // идентификатор записи
    $meta_key,  // ключ мета-поля
    $meta_value // значение мета-поля
);

Если оставить параметр $meta_value пустым, то все значения мета-поля с указанным ключом будут удалены. Если нужно удалить только одно значение — в третьем параметре необходимо указать удаляемое значение.

Мета-данные для других сущностей

Мета-поля для записей хранятся в таблице БД wp_postmeta. Аналогичные таблицы существуют для пользователей, комментариев и терминов. Все метаданные имеют одинаковую логику и таблицы одинаковой структуры в базе данных.

WordPress активно использует таблицы метаданных для записей и для пользователей. Менее активно используется таблица метаданных для комментариев — туда при помещении комментария в корзину записывается время удаления. И совсем не используется таблица метаданных для терминов.

Функции мета-данных

Почти все функции метаданных работают на основе четырех базовых функций. На основе этих четырех функций по сути построено API работы со всеми метаданными в WordPress.

  • add_metadata($meta_type, $object_id, $key, $value, $unique)
  • update_metadata($meta_type, $object_id, $key, $value, $prev_value)
  • delete_metadata($meta_type, $object_id, $key, $value, $delete_all)
  • get_metadata($meta_type, $object_id, $key, $single)

Для записей

  • get_post_meta($post_id, $key, $single)
  • add_post_meta($post_id, $key, $value, $unique)
  • update_post_meta($post_id, $key, $value, $prev_value)
  • delete_post_meta($post_id, $key, $value)
  • get_post_custom($post_id)
  • the_meta()

Для пользователей

  • get_user_meta($user_id, $key, $single)
  • add_user_meta($user_id, $key, $value, $unique)
  • update_user_meta($user_id, $key, $value, $prev_value)
  • delete_user_meta($user_id, $key, $value)
  • get_the_author_meta($field)

Для комментариев

  • get_comment_meta($comment_id, $key, $single)
  • add_comment_meta($comment_id, $key, $value, $unique)
  • update_comment_meta($comment_id, $key, $value, $prev_value)
  • delete_comment_meta($comment_id, $key, $value)

Для таксономий (терминов)

  • get_term_meta($term_id, $key, $single)
  • add_term_meta($term_id, $key, $value, $unique)
  • update_term_meta($term_id, $key, $value, $prev_value)
  • delete_term_meta($term_id, $key, $value)
  • has_term_meta($term_id)

Поиск: CMS • Web-разработка • WordPress • Произвольные поля • Мета данные • update_post_meta • add_post_meta • delete_post_meta

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.