Я искал способ автоматической вставки настраиваемого поля при публикации настраиваемого типа сообщения. И я неоднократно находил одно и то же решение, отсюда:
http://pippinspages.com/tutorials/publish-action-hook-for-custom-post-types/
Я пробовал это, и по какой-то причине это просто не работает для меня. У меня есть собственный тип сообщений, который называется sales_pages.
Вот мой код:
// function to be executed when a custom post type is published
function run_when_post_published($post_ID)
{
// your function code here
global $wpdb;
if(!wp_is_post_revision($post_ID)) {
add_post_meta($post_ID, 'field-name', 'custom value', true);
}
}
// replace {custom_post_type_name} with the name of your post type
add_action('new_to_publish_sales_pages', 'run_when_post_published');
add_action('draft_to_publish_sales_pages', 'run_when_post_published');
add_action('pending_to_publish_sales_pages', 'run_when_post_published');
Не могли бы вы подсказать, что с этим не так?
Я подтвердил, что это работает с обычными сообщениями (конечно, с хуками публикации сообщений). Это просто не делает то же самое для моих пользовательских типов сообщений.
Спасибо заранее за любые советы.
Привет, Брайан
От {$old_status} до {$new_status}_{$post_type} нет хука действия. Изучите функцию wp_transition_post_status, чтобы узнать, какие типы хуков вы можете там использовать.
Вместо этого просто используйте общий хук transition_post_status. Он получает старый и новый статусы (чтобы вы могли проверить статус на наличие изменений) и сам объект $post, чтобы вы могли проверить $post->post_type.
Как сказал Отто, нет хука действия от ${old_status} до ${new_status}_${post_type}, но вы можете использовать new_to_publish, draft_to_publish и pending_to_publish, чтобы добавить метаданные к вашим пользовательским сообщениям.
Хотя я не эксперт, вот пара идей:
Вы пробовали update_post_meta вместо add_post_meta? Если настраиваемое поле уже существует, add_post_meta, вероятно, не будет иметь никакого эффекта.
Вы уверены, что sales_pages — это «слаг сообщения», который не обязательно совпадает с именем пользовательского типа сообщения? Я помню, как изо всех сил пытался понять, что такое «слаг сообщения». К сожалению, я забыл ответ.
Вы должны подключить
post_save
и проверить пару вещей:Что-то типа: