wp remote get и расширенные пользовательские поля, возвращающие сотни дубликатов - PullRequest
0 голосов
/ 11 ноября 2019

Я нашел учебное пособие, объясняющее, как использовать 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
        ]
    ]);
}

Что я делаю не так, что мне не хватает? Сценарий выполняется без ошибок, но он продолжает работать и делать много копий одного и того же поста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...