Intereting Posts

Вставить термин, когда публикуется страница – избежать дубликатов после редактирования

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

Этот фрагмент из этого ответа , он работает для вставки терминов.

function add_page_term( $post_ID ) { $post = get_post( $post_ID ); wp_insert_term( $post->post_title, 'mypages' ); } add_action( 'publish_page', 'add_page_term' ); 

До сих пор я пытался сначала получить post_ID, а затем заменить его на post_title, используя крюк pre_insert_term или переопределить значение с помощью str_replace, но не имел успеха. Есть идеи по этому поводу? Помощь высоко ценится. Заранее спасибо!

Solutions Collecting From Web of "Вставить термин, когда публикуется страница – избежать дубликатов после редактирования"

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

Пример:

 add_action( 'transition_post_status', 'add_awesome_terms', 10, 3 ); function add_awesome_terms( $new_status, $old_status, $post ) { // only run when it's a page, new status is publish and old status isn't publish if ( $post->post_type == 'page' && $new_status == 'publish' && $old_status != 'publish' ) { // do whatever you need here, it runs only when your set conditions are met wp_insert_term( $post->post_title, 'mypages' ); } } 

Маленький бонус: у вас уже есть объект $post и у вас есть доступ ко всем переменным $post .

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


Возможные статусы сообщений:

  • new – когда нет предыдущего статуса
  • publish – опубликованное сообщение или страницу
  • pending – ожидающий рассмотрения
  • draft – должность в проекте статуса
  • auto-draft – новый созданный пост без содержимого
  • future – должность, которую планируется опубликовать в будущем
  • private – не видно пользователям, которые не вошли в систему
  • inherit – ревизия или вложение
  • trash – сообщение находится в корзине

Не забудьте использовать переменные $post в ваших интересах, у вас уже есть это! Переменные перечислены здесь .