я использую /wp-admin/admin-post.php
в качестве конечной точки для получения ajax-запросов от моего приложения Angular. Вот настройка для регистрации конечной точки в моем плагине WordPress:
function _admin_post_myaction() {
// Just to see what's there
wp_send_json( array(
'$_POST' => $_POST,
'$_GET' => $_GET,
'$_REQUEST' => $_REQUEST
) );
}
add_action( 'admin_post_myaction', '_admin_post_myaction' );
add_action( 'admin_post_nopriv_myaction', '_admin_post_myaction' );
В Angular я отправляю запрос сообщений с использованием HttpClient:
this.http
.post(this.config.adminURL + '?action=order_ingredients', {
action: 'order_ingredients',
data: this.data
})
.subscribe({
next: value => {
console.log('Next', value);
},
error: err => {
console.error('Error', err);
},
complete: () => {
console.log('Complete');
}
});
Я получаю следующий результат:
{action: "myaction", $_POST: [], $_REQUEST: {action: "myaction"}
Похоже, что данные POST стираются WordPress в какой-то момент, прежде чем они перейдут к действию администратора после публикации. Есть идеи?
Вам нужно получить содержимое запроса и json декодировать его, используя что-то вроде:
$data = json_decode(file_get_contents('php://input'));
Других решений пока нет …