Я нашел учебное пособие, объясняющее, как использовать wp_remote_get()
и публиковать результаты в пользовательских типах записей WP с помощью плагина Advanced Custom Fields.
Моя проблема заключается в том, что при запуске этого из панели администратора, как объяснено, яполучить сотни повторяющихся записей для одного и того же продукта! Я предполагаю, потому что я перебираю страницы, как объяснено в учебнике, но конечная точка API, которую я использую, не разбита на страницы, как в учебнике. Я пытаюсь выяснить, как остановить цикл, когда вновь созданный пост уже существует. Вот мой код
<?php
add_action('wp_ajax_nopriv_get_products_from_api', 'get_products_from_api');
add_action('wp_ajax_get_products_from_api', 'get_products_from_api');
function get_products_from_api() {
$current_page = ( ! empty($_POST['current_page']) ) ? $_POST['current_page'] : 1;
$myproducts =[];
$results = wp_remote_retrieve_body( wp_remote_get('https://link/to/api/endpoint/'));
$results = json_decode($results);
if ( ! is_array( $results ) || empty ( $results ) ) {
return false;
}
$myproducts[] = $results;
foreach( $myproducts[0] as $myproduct ) {
$myproducts_slug = $myproduct->name;
$existing_product = get_page_by_path($myproducts_slug, 'OBJECT', 'myproduct');
if($existing_product === null ) {
$inserted_product = wp_insert_post([
'post_name' => $myproducts_slug,
'post_title' => $myproducts_slug,
'post_type' => 'myproducts',
'post_status' => 'publish'
]);
if (is_wp_error($inserted_product) ) {
continue;
}
//ADVANCED CUSTOM FIELDS INTEGRATION
$fillable = [
'field_5dc862b619530' => 'name',
'field_5dc862ec19531' => 'style',
'field_5dc863269b298' => 'description',
'field_5dc8633738fad' => 'rating',
];
foreach( $fillable as $key => $name ) {
update_field( $key, $myproducts->$name, $inserted_product );
}
}
}
$current_page = $current_page +1;
wp_remote_post(admin_url('admin-ajax.php?action=get_products_from_api'), [
'blocking' => false,
'sslverify' => false,
'body' => [
'current_page' => $current_page
]
]);
}
Что я делаю не так, что мне не хватает? Сценарий выполняется без ошибок, но он продолжает работать и делать много копий одного и того же поста.