Как выполнить функцию при публикации поста?

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

function a_new_post($post){
  $post_id = $post->ID;

  if ( !get_post_meta( $post_id, 'firstpublish', $single = true ) ) {
      // ...
      update_post_meta( $post_id, 'firstpublish', true );
  }
}
add_action( 'draft_to_published', 'a_new_post' );

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

Кто-нибудь видит что-то не так?

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 1
  1. fuxia

    Правильное действие: 'draft_to_publish' .

    Чтобы убедиться, что вы использовали правильный статус, попробуйте получить список всех зарегистрированных статусов сообщений (включая пользовательские статусы) с помощью:

    <pre><?php print '- ' . implode( "n- ", array_keys( get_post_stati() ) );?></pre>
    

    Вы должны получить:

    • publish
    • future
    • draft
    • pending
    • private
    • trash
    • auto-draft
    • inherit

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

    Вы также можете подключиться к 'transition_post_status' , в зависимости от ваших потребностей. Вы получаете новый и старый статус в качестве аргументов, третий аргумент - это объект post. Он также будет перехватывать future_to_publish , а также сообщения, которые были удалены и переизданы ( trash_to_publish ).

    Пример:

    add_action( 'transition_post_status', 'a_new_post', 10, 3 );
    
    function a_new_post( $new_status, $old_status, $post )
    {
        if ( 'publish' !== $new_status or 'publish' === $old_status )
            return;
    
        if ( 'post' !== $post->post_type )
            return; // restrict the filter to a specific post type
    
        // ...
    }
    

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: