Intereting Posts
Wp_head и wp_footer vs wp_enqueue_script файлы javascript? Таможенный архив типа post с динамической фильтрацией таксономии – возможно ли это Зеркальный сайт как окончательная версия? Пользовательские страницы-ссылки для разбитых постов | wp_link_pages <! – nextpage -> quicktag WordPress 4.4+ разрывает расширение Walker Связанный список тегов из определенной категории, упорядоченных по счету API REST: ограничения разрешений на чтение для конечных точек по умолчанию Отображает URL-адрес дважды и получает 404 ошибки после активации Сообщение и bbpress – ссылка обсудить на форуме Автоматическое удаление вложений, которые старше х дней Есть ли способ сделать чистую страницу ванилы только HTML / CSS / JS Как найти идентификатор родительского дома таксономии на странице таксономии детей? WP 3-way система голосования: На что-то! Пожалуйста помоги! Не удается заставить wp_insert_post работать Проблемы с использованием встроенной функции WP + Instagram + AJAX

Вставка пользовательской почты после публикации опубликованного типа публикации

Я пытаюсь заполнить таблицу postmeta специальным значением, когда публикуется пользовательский тип («мои-решения»). Я прочитал несколько потоков, блог Codex и Pippin по этому вопросу и попробовал много вариантов, но не могу заставить это работать. Если кто-то может добавить или исправить что-нибудь, что было бы здорово.

function run_when_my_solution_published( $post ){ global $wpdb; $id = $post->ID; if($post->post_type == 'my-solutions'){ $wpdb->insert('wp_postmeta', array( 'meta_id' => NULL , 'post_id' => $id , 'meta_key' => 'my_json' , 'meta_value' => 'json' ), array( '%d' , '%d' , '%s' , '%s' ) ); } } add_action('new_to_publish', 'run_when_my_solution_published'); 

Solutions Collecting From Web of "Вставка пользовательской почты после публикации опубликованного типа публикации"

Новое Новое решение:

 function wpse153622_transition_solution( $new_status, $old_status, $post ) { if ( $new_status != $old_status && 'publish' === $new_status && 'my-solution' === $post->post_type ) { update_post_meta( $post_id, 'my_json', 'json' ); } } add_action( 'transition_post_status', 'wpse153622_transition_solution', 10, 3 ); 

Это должно срабатывать только тогда, когда 1. новый статус сообщения не совпадает с прежним. 2. новый статус сообщения равен публикации и 3. тип публикации равен типу вашего сообщения.

Новое решение

Редактирование: после чтения сообщений о переходах статуса сообщения, я думаю, что это должно сделать трюк:

 function wpse153622_save_solution( $post_id, $post ) { update_post_meta( $post_id, 'my_json', 'json' ); } add_action( 'publish_my-solution', 'wpse153622_save_solution', 10, 2 ); 

Это использует publish_my-solution , которое должно запускаться только при публикации публикации типа my-solution . См. {status}_{post_type} здесь .

Старое решение

Использование действия save_post_{post_type} будет работать для вас, хотя оно будет вызываться всякий раз, когда вы обновляете сообщение, а также публикуете:

 function wpse153622_save_solution( $post_id, $post, $update ) { update_post_meta( $post_id, 'my_json', 'json' ); } add_action( 'save_post_my-solution', 'wpse153622_save_solution', 10, 3 ); 

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

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

 function run_when_my_solution_published( $new_status, $old_status, $post ) { global $wpdb; if($post->post_type == 'my-solutions' && $new_status == 'publish'){ $wpdb->insert('wp_postmeta', array( 'meta_id' => NULL , 'post_id' => $id , 'meta_key' => 'my_json' , 'meta_value' => 'json' ), array( '%d' , '%d' , '%s' , '%s' ) ); } } add_action ('transition_post_status', 'run_when_my_solution_published', 999, 3); 

Хотя Codex говорит, что использовать этот крючок неприемлемо, это был единственный, с которым я мог бы работать.

Как сказал @Howdy_McGee, я фактически использовал publish_post действие publish_post .

Пример кода для отправки электронного сообщения на публикацию:

 function post_published_notification( $ID, $post ) { $author = $post->post_author; /* Post author ID. */ $name = get_the_author_meta( 'display_name', $author ); $email = get_the_author_meta( 'user_email', $author ); $title = $post->post_title; $permalink = get_permalink( $ID ); $edit = get_edit_post_link( $author, '' ); $to[] = sprintf( '%s <%s>', $name, $email ); $subject = sprintf( 'Published: %s', $title ); $message = sprintf ('Congratulations, %s! Your article “%s” has been published.' . "\n\n", $name, $title ); $message .= sprintf( 'View: %s', $permalink ); $headers[] = ''; wp_mail( $to, $subject, $message, $headers ); } add_action( 'publish_post', 'post_published_notification', 10, 2 ); 

Вы можете использовать более или менее то, что вы уже использовали для фильтрации по post_type . Я также определенно рекомендую использовать функцию add_post_meta вместо пользовательского запроса $wpdb .