Intereting Posts
Добавить всплывающее окно на кнопки TinyMCE Добавить страницу меню на мультисайте Ввод динамических строк в URL-адресах Оберните содержимое виджета с помощью div и получите внешний вид виджета снаружи? Быстрый способ добавить страны в качестве обычного таксономического термина? Как добавить настройки настраивателя в дочернюю тему Удалить дочернюю категорию из URL Тип персонализированного сообщения: Получить последнее обновление Плагины и резервное копирование не работают корректно на новом сервере Digital Ocean Вертикальное меню боковой панели Родитель и ребенок не отображаются правильно Создание миниатюр для видео Как я могу автоматически отправлять сообщения WordPress в 2 домена Сделать некоторые ссылки, созданные из функции wp_nav-menu unclickeable? Как заставить мой основной образ растянуть всю длину экрана? Предупреждение: неверный аргумент, предоставленный foreach () в post.php

Как вставить пользовательскую функцию в wp_insert_post

Я пытаюсь отправить push-уведомление, когда администратор WordPress добавит новое сообщение.

Я искал часы, чтобы добавить свою функцию, и после многого я нашел основную функцию wp_insert_post внутри wp-includes/post.php

эта функция возвращает Post_ID, поэтому я добавил свой собственный скрипт перед возвратом:

 include '../push/send_message.php'; sendNotification($postarr['post_title'],$postarr['guid']); 

Проблема в том, что когда я импортирую эти две строки здесь

 function wp_insert_post($postarr, $wp_error = false) { ... if ( $update ) { do_action('edit_post', $post_ID, $post); $post_after = get_post($post_ID); do_action( 'post_updated', $post_ID, $post_after, $post_before); } do_action('save_post', $post_ID, $post); do_action('wp_insert_post', $post_ID, $post); include '../push/send_message.php'; sendNotification($postarr['post_title'],$postarr['guid']); return $post_ID; } 

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

Solutions Collecting From Web of "Как вставить пользовательскую функцию в wp_insert_post"

Посмотрите эти два крючка в взломанном коде ядра, который вы опубликовали?

 do_action('save_post', $post_ID, $post); do_action('wp_insert_post', $post_ID, $post); 

Это то, что вам нужно использовать, чтобы сделать это правильно.

 function run_on_update_post($post_ID, $post) { var_dump($post_ID, $post); // debug include '../push/send_message.php'; sendNotification($post['post_title'],$post['guid']); return $post_ID; } add_action('save_post', 'run_on_update_post', 1, 2); 

save_post запускается каждый раз, когда сообщение сохраняется. Я не могу поклясться, что ваша функция будет работать, но вы должны иметь возможность изменять вещи, чтобы заставить ее работать. Просто посмотрите на var_dump и соответствующим образом var_dump . include s также не может работать, поскольку это относительные пути. Возможно, вам также придется это изменить.

Изменение файлов ядра – это не-go . API-интерфейс плагина обеспечивает соединение, необходимое для выполнения подобных действий. Функция, которую вы изменяете, имеет множество доступных крючков . См. Также: Действия и фильтры – это не то же самое ….

Решение состоит в том, чтобы создать свой собственный плагин * :

 <?php /* Plugin name: My first plugin */ add_action( 'wp_insert_post', 'callback_so_17530930', 10, 2 ); function callback_so_17530930( $post_ID, $post ) { // Adjust for the desired Post Type if( 'page' !== $post->post_type ) return; include '../push/send_message.php'; sendNotification( $post->post_title, $post->guid ); } 

* См. Где я могу поместить фрагменты кода, которые я нашел здесь или где-то еще в Интернете?

Просто оставьте файл PHP плагина внутри папки wp-content/plugins . Перейдите на страницу плагинов панели приборов и активируйте ее. Подробнее в Кодексе .