Вы можете создать дочернюю тему или плагин , чтобы написать свои пользовательские функции.
Вы можете обрабатывать AJAX запросов с конкретный c действие и вызов wp_insert_post()
для создания сообщений.
Пример, с которого можно начать:
add_action( 'wp_ajax_create_post', 'create_post_ajax_handler' );
/**
* Handle the create post ajax request
*/
function create_post_ajax_handler() {
// Get the post title from the ajax request
// You can get whatever you have passed here
// Also, perform any validations you might want
$post_title = $_POST['post_title'];
// Create the post
$post_id = wp_insert_post( array(
'post_title' => $post_title,
'post_status' => 'publish'
// you could also specify the 'post_type', 'meta_input' etc
), true );
// Error handling
if ( is_wp_error( $post_id ) ) {
// Send error response
wp_send_json_error( $post_id->get_error_message() );
}
// Send success response
wp_send_json_success( $post_id );
}
add_action( 'wp_enqueue_scripts', 'enqueue_ajax_script' );
/**
* Enqueue the ajax script
*/
function enqueue_ajax_script() {
// Enqueue your JavaScript file with 'jquery' as a dependency
wp_enqueue_script(
'ajax-script',
plugin_dir_url( __FILE__ ) . 'ajax-script.js',
array( 'jquery' )
);
// Expose the url to admin-ajax.php as `ajax_object.ajaxurl`
wp_localize_script(
'ajax-script',
'ajax_object',
array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) )
);
}
// Set the url as `ajax_object.ajaxurl` which is the url to admin-ajax.php
$.ajax(ajax_object.ajaxurl, {
method: 'POST',
data: {
// Your action should match the name of your 'wp_ajax_{action}' hook
action: 'create_post',
// Pass any data you want
post_title: 'Example post title'
}
})
.done((response) => {
// Do whatever you want with the response (in this example, this would be the post id)
console.log(response);
})
.fail((error) => {
// Handle the errors
console.error(error);
});
Вы также можете посмотреть Одноразовые номера , которые помогают защитить от Подделки межсайтовых запросов (CSRF) .
Отказ от ответственности: Я не тестировал этот код, но я надеюсь, что вы поняли.
Редактировать: Поскольку вы упомянули, что используете Advanced Custom Поля:
$post_id = wp_insert_post( array(
'post_title' => $post_title,
'post_status' => 'publish',
// You can set ACF fields in the 'meta_input' array
'meta_input' => array(
'acf_custom_field_name' => 'an example value'
)
), true );
Редактировать # 2: Пожалуйста, прочитайте больше о AJAX в WordPress на Кодекс .
Ответ на ваш комментарий:
на какой URL я должен сделать запрос ajax, чтобы он срабатывал?
В Кодексе под AJAX в плагинах> Ajax на стороне, обращенной к зрителю
Вы также можете использовать wp_localize_script()
, чтобы сделать URL-адрес доступным для вашего сценария, и сгенерировать его с помощью следующего выражения: admin_url( 'admin-ajax.php' )
как вставить действие "wp_ajax_create_post" в мой запрос на публикацию?
В Кодексе, AJAX в Плагинах> Ajax на стороне администрирования
Обратите внимание, как значение ключа 'action' 'my_action', определенное в нашем JavaScript выше, соответствует второй половине действия ' wp_ajax_my_action 'в нашем обработчике AJAX ниже.