В чем разница между перехватами update_post_meta и update_postmeta?

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

Пока я прекрасно понимаю, что update_post_meta работает для всех типов сообщений, а update_postmeta работает только на пост, мой вопрос не зависит от типа сообщения, а также не просто охватывает update, так как это то же самое для updated, delete и т. д.

После проверки g wp-includes/meta.php, я нашел ранее упомянутые крючки, чтобы получить мои вещи, но это подняло вопросы для меня.

Раздел в ядре - это одна строка 215 в версии 4.4.2:

foreach ( $meta_ids as $meta_id ) {
    /**
     * Fires immediately before updating metadata of a specific type.
     *
     * The dynamic portion of the hook, `$meta_type`, refers to the meta
     * object type (comment, post, or user).
     *
     * @since 2.9.0
     *
     * @param int    $meta_id    ID of the metadata entry to update.
     * @param int    $object_id  Object ID.
     * @param string $meta_key   Meta key.
     * @param mixed  $meta_value Meta value.
     */
    do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
}

if ( 'post' == $meta_type ) {
    foreach ( $meta_ids as $meta_id ) {
        /**
         * Fires immediately before updating a post's metadata.
         *
         * @since 2.9.0
         *
         * @param int    $meta_id    ID of metadata entry to update.
         * @param int    $object_id  Object ID.
         * @param string $meta_key   Meta key.
         * @param mixed  $meta_value Meta value.
         */
        do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
    }
}

Итак, есть крючок для update_post_meta, update_comment_meta и update_user_meta. Непосредственно после этого вызывается еще один крючок - только для таблицы posts, называемый update_postmeta, работающий почти точно так же, с той лишь разницей, что что передаются данные maybe_serialize() meta_value.

Строка 204:

$_meta_value = $meta_value;
$meta_value = maybe_serialize( $meta_value );

Сначала я подумал, что второй крючок существует для обратной совместимости, но оба они были введены в 2.9.0. update_postmeta и update_{$meta_type}_meta

Глядя немного дальше, я также нашел еще один ответ от меня, три года назад, где эта тема также поднялась, но это было не главное.

Я что-то пропустил?

Является ли эта обратная совместимость в конце концов - и только что переместилась в meta.php в 2.9.0? Или есть какая-то настоящая причина иметь оба этих? Для меня действия, подключенные к функции update_post_meta(), могут легко maybe_unserialize() данные, если это необходимо, поэтому я действительно не вижу смысла иметь оба.

Ждем ваших предложений!

8 голосов | спросил fischi 8 FebruaryEurope/MoscowbMon, 08 Feb 2016 09:01:44 +0300000000amMon, 08 Feb 2016 09:01:44 +030016 2016, 09:01:44

1 ответ


4

Оба они были представлены в версии 2.9, но были сделаны в разных файлах.

update_postmeta перешел в /wp-admin/includes/post.php

В то время как ...

update_{$meta_type}_meta перешел в /wp-includes/meta.php

Только позже update_postmeta был смещен в /wp-includes/meta.php

Итак, я считаю, что это было для обратной совместимости, потому что, поскольку hook update_postmeta всегда получал значение maybe_serialize(), тогда он должен продолжать это делать, несмотря на то, что позже его переместили в /wp-includes/meta.php.

Кроме того, что вы, возможно, уже знаете, но для чтения других, крючок update_postmeta возвращает данные из $_POST['meta'] superglobal и ключ, который содержит данные из панель настраиваемых полей .

Неужели это было плохое дизайнерское решение? Похоже на это.

Я думал, что вспомнил о какой-то другой причине, связанной с этим вопросом в отношении двойной сериализации данных, однако я мог бы смешиваться с чем-то другим.

Интересно, что если вы сохраняете уже сериализованные данные в текстовом поле Custom Custom UI, WordPress будет сериализовать его снова, прежде чем хранить его, что поддерживает понятие обратной совместимости по отношению к:

Примечание: этот ответ не обязательно завершен .

ответил userabuser 8 FebruaryEurope/MoscowbMon, 08 Feb 2016 11:03:28 +0300000000amMon, 08 Feb 2016 11:03:28 +030016 2016, 11:03:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132