Правильный контекст для wp_remote_post ()

Я хотел бы использовать функцию wp_remote_post () в функции для отправки HTTP-запроса на PHP-скрипт внутри подключаемого модуля.

Я успешно отправляю сценарий подключаемого модуля, но имею проблемы с контекстом запроса.

В functions.php :

function post_to_plugin($name, $email) { $plugin_url = plugins_url( '/my-plugin/db-insert.php' ); $form = array( 'name' => $name, 'email' => $email ); $result = wp_remote_post( $plugin_url, array( 'body' => $form ) ); } 

Пример /my-plugin/db-insert.php :

 if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You are not allowed to call this page directly.'); } if (isset($_POST['name']) && isset($_POST['email'])) { global $wpdb; $wpdb->insert( 'table', array ( 'name' => $_POST['name'], 'email' => $_POST['email'] ) ); } 

Мой запрос на сообщение останавливается первой строкой в db-insert.php . Я могу удалить эту строку, которая не может быть хорошим решением. Но тогда insert все еще не удается, потому что db-insert.php не может найти global $wpdb . Возможно ли сделать этот пост-запрос в надлежащем контексте wordpress / скрипта плагина?

Solutions Collecting From Web of "Правильный контекст для wp_remote_post ()"

Вы не должны отправлять сообщения прямо в свой файл плагина – WordPress не будет загружен, и вы не должны загружать его вручную.

Используйте API AJAX и крючок действия для его обработки (обратите внимание, что он не должен быть фактическим запросом AJAX):

 function wpse_180814_post_to_plugin( $name, $email ) { $result = wp_remote_post( admin_url( 'admin-ajax.php' ), array( 'body' => array( 'action' => 'wpse_180814_action', 'name' => $name, 'email' => $email, ), ) ); } function wpse_180814_action() { if ( isset( $_POST['name'], $_POST['email'] ) ) { global $wpdb; $wpdb->insert( 'table', array ( 'name' => $_POST['name'], 'email' => $_POST['email'] ) ); } } add_action( 'wp_ajax_nopriv_wpse_180814_action', 'wpse_180814_action' ); add_action( 'wp_ajax_wpse_180814_action', 'wpse_180814_action' );