Фильтры. Должен Ли Я Использовать Add_Action('Publish_Post Или Add_Filter('Publish_Post?

  • Автор темы Жаn
  • Обновлено
  • 22, Oct 2024
  • #1

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

 
 //add_filter('edit_post', 'update_table_products', 10, 2);
 

Ни один из крючков не работает. я ожидал print_r to show some data

Кстати, у меня также есть функция обновления, запускаемая

function insert_table_products($post_id, $post) { if ($post->post_type == 'custom-products') { global $wpdb; $custom_meta = get_post_meta($post_id); //print_r($custom_meta); //print_r($post); $attachments = new Attachments('my_attachments'); if ($attachments->exist()) : $my_index = 0; $use_image = new SplFileInfo($attachments->url($my_index)); $use_main_image = $use_image->getFilename(); endif; $wpdb->insert( 'products', array( 'product_code' => $custom_meta['product_code'][0], 'product_name' => $post->post_title, 'product_img_name' => $use_main_image, 'price' => $custom_meta['product_price'][0], //$POST['acf-field-price_patch'], 'product_inventory' => $custom_meta['product_stock'][0], //$POST['fields[field_54df75e760b5e]'], ) ); } } add_filter('publish_post', 'insert_table_products', 10, 2); //add_action( 'publish_post', 'insert_table_products', 10, 2);

который также, похоже, не работает правильно.

Есть идеи?

#фильтры #хуки #действия

Жаn


Рег
05 Jun, 2012

Тем
67

Постов
211

Баллов
576
  • 25, Oct 2024
  • #2

 
 save_post_{$post_type} 
doesn't work for custom post types, the correct hook (action hook) is save_post . Вы должны использовать add_action( 'transition_post_status', function ( $new_status, $old_status, $post ) { if( 'publish' == $new_status && 'publish' == $old_status && $post->post_type == 'my_post_type' ) { //DO SOMETHING IF A POST IN POST TYPE IS EDITED } }, 10, 3 ); as this is an action hook.

Я также склонен использовать transition_post_status hook which is a much more universal hook as it fires everytime a post's status is changed regardless. You can use add_action( 'transition_post_status', function ( $new_status, $old_status, $post ) { if( 'publish' == $new_status && 'publish' != $old_status && $post->post_type == 'my_post_type' ) { //DO SOMETHING IF NEW POST IN POST TYPE IS PUBLISHED } }, 10, 3 ); и $new_status to check the previous and new status of a post then do something.

Для нового поста можно что-то вроде этого: (Требуется PHP 5.3+.)

$old_status

РЕДАКТИРОВАТЬ

Для редактирования/обновления сообщений используйте transition_post_status , you can do

add_action()

Для получения дополнительной информации о смене статуса публикации вы можете проверить кодекс

РЕДАКТИРОВАТЬ 2

Настраиваемые поля, встроенные и полученные из расширенного плагина настраиваемых полей, используют publish_{$custom_post_type} крючок, который запускается после пост-перехода, поэтому попытка добавить настраиваемые поля здесь не сработает

Для пользовательских типов сообщений был введен новый крючок под названием publish_post чтобы облегчить задачу. Форум ACF также рекомендует этот крючок для обновления настраиваемых полей.

 

Kolyakorostelev


Рег
07 Nov, 2019

Тем
85

Постов
210

Баллов
685
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно