Я пытаюсь настроить пользовательский тип сообщения после этого урока . Тем не менее, я немного смущен тем, как / где реализовывать update_post_meta()
. Учебник предлагает этот шаблон:
add_action('save_post', 'save_my_metadata');
function save_my_metadata()
{
global $post;
update_post_meta($post->ID, 'my_metadata', $_POST['my_metadata']);
}
Который работает, но имеет неприятный эффект добавления этих метаданных к каждому посту, независимо от того, принадлежит ли он к этому пользовательскому типу или нет.
Я положил выше, functions.php
и я предполагаю, что это может быть частью проблемы. Я предполагаю, что мне нужно ограничить действие «save_post», чтобы срабатывать только для сообщений моего пользовательского типа.
custom-post-types
Бобби Джек
источник
источник
Ответы:
Это должно работать. Просто замените 'your_post_type' на имя типа поста. Также малоизвестный факт: хук save_post передает идентификатор сообщения в качестве аргумента.
РЕДАКТИРОВАТЬ
Я обновил функцию, чтобы отразить комментарий Яна. Спасибо, Ян!
источник
Если вы хотите обрабатывать несколько типов записей, я бы порекомендовал базовый оператор switch:
Случаи в основном такие же, как
if($post->post_type) == 'post_type_1') {}
Но не требуют нескольких блоков if-else.default
Блок в коммутаторе обрабатывает случаи , когда тип пост не в пользовательском наборе.источник
@John P Bloch и @EAMann уже дали отличные ответы, так что мой в дополнение:
Очевидно, это означает, что вам понадобится пользовательский метабокс, чтобы иметь возможность редактировать поля тоже. Вот экран редактирования для контекста:
save_{$post_type}_post
"; дляmovie
типа сообщения это было быsave_movie_post
. Вот что вам нужно добавить вfunctions.php
файл вашей темы или в плагин где-нибудь:После этого вы можете переписать свой оригинальный код следующим образом (включая трюк с подчеркиванием из # 1 выше):
источник
Лично я предпочитаю следовать шаблону ниже для добавления пользовательских мета-обработчиков к типам записей. Ниже вы можете добавить мета-поддержку к типу поста, просто добавив ключ support ('subtitle' в примере ниже) в массив support для типа поста, вызвав add_post_type_support ('my_post_type', 'subtitle');
Надеюсь, что-то подобное скоро будет добавлено в ядро.
источник
Перед обновлением проверьте, относится ли текущая запись к вашей записи. Это гарантирует, что вы не сохраните его для всех сообщений.
Вы также должны проверить ввод (это отсутствует в вашем примере) и, кроме того, имейте в виду, что вы можете добавлять действие только тогда, когда активен этот тип записи. Если это так, вам не нужно проверять этот тип сообщения позже.
Получение сообщения типа:
get_post_type()
или$post->post_type;
источник
Я не могу заставить это работать - не уверен, что я делаю неправильно - но я пытаюсь использовать хук post_updated вместо save_post - так как я хочу, чтобы эти значения были вставлены после обновления поста, чтобы я мог получить значения из других пользовательских полей ,
источник