bryanmc
  • 0
Новичок

Автоматически вставлять настраиваемое поле в публикацию произвольного типа публикации

  • 0

Я искал способ автоматической вставки настраиваемого поля при публикации настраиваемого типа сообщения. И я неоднократно находил одно и то же решение, отсюда:

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');

Не могли бы вы подсказать, что с этим не так?

Я подтвердил, что это работает с обычными сообщениями (конечно, с хуками публикации сообщений). Это просто не делает то же самое для моих пользовательских типов сообщений.

Спасибо заранее за любые советы.

Привет, Брайан

Share
  1. От {$old_status} до {$new_status}_{$post_type} нет хука действия. Изучите функцию wp_transition_post_status, чтобы узнать, какие типы хуков вы можете там использовать.

    Вместо этого просто используйте общий хук transition_post_status. Он получает старый и новый статусы (чтобы вы могли проверить статус на наличие изменений) и сам объект $post, чтобы вы могли проверить $post->post_type.

    • 0
  2. Как сказал Отто, нет хука действия от ${old_status} до ${new_status}_${post_type}, но вы можете использовать new_to_publish, draft_to_publish и pending_to_publish, чтобы добавить метаданные к вашим пользовательским сообщениям.

    // function to be executed when a custom post type is published
    function run_when_post_published($post)
    {
        // your function code here
        global $wpdb;
          if(!wp_is_post_revision($post->ID) && $post->post_type == 'sales_pages') {
          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', 'run_when_post_published');    
    add_action('draft_to_publish', 'run_when_post_published');    
    add_action('pending_to_publish', 'run_when_post_published');
    
    • 0
  3. Хотя я не эксперт, вот пара идей:

    Вы пробовали update_post_meta вместо add_post_meta? Если настраиваемое поле уже существует, add_post_meta, вероятно, не будет иметь никакого эффекта.

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

    • 0
  4. Вы должны подключить post_save и проверить пару вещей:

    1. Это ваш пользовательский тип сообщения
    2. Это не автосохранение
    3. это не ревизия

    Что-то типа:

    add_action('save_post', 'my_custom_save');
    
    function my_custom_save( $post_id ){
    
        if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
            return $post_id;
    
        if ( 'your_custom_post_type' == $_POST['post_type'] ){
    
                if (!wp_is_post_revision($post_id)){
    
                    add_post_meta($post_ID, 'field-name', 'custom value', true);
    
                }
        }
    
    }
    
    • 0

Оставить ответ

You must login to add an answer.