update_post_meta и update_field не работают без каких-либо ошибок - PullRequest
0 голосов
/ 30 октября 2019

Я работаю с сайтом WordPress, который автоматически импортирует все данные из API на сайт через cron job. Тем не менее, я сейчас нахожусь на части сохранения данных поля из API. Проблема в том, что update_post_meta и update_fields не работают.

Я уже пытался поменять местами два метода сохранения, но оба не работают. Никаких ошибок и никаких результатов (что довольно странно для меня). Я проверил встроенный плагин сайта и он использует update_post_meta.

add_action('wp_ajax_nopriv_get_properties_from_api','get_properties_from_api');
add_action('wp_ajax_get_properties_from_api','get_properties_from_api')
    function  get_properties_from_api(){

        $file = get_stylesheet_directory() . '/report.txt';
        $current_page=(! empty($_POST['current_page'])) ? $_POST['current_page'] : 1;
        $properties = [];

        $results = wp_remote_retrieve_body(wp_remote_get('https://www.realestateview.com.au/listing_api?rm=search&company=castlemain&code=29GKRRSgkVdQVM&CID=5813&json=1&ptr=r&con=S&portalview=residential&rn=1&pg='. $current_page));

        file_put_contents($file, "Current page: ". $current_page. "\n\n", FILE_APPEND);

        $results=json_decode($results, true);

        if(!is_array($results['Listings']) || empty($results['Listings'])){
            return false;
        }

        $properties[]=$results;
        foreach($properties[0] as $property){
            $property_slug = sanitize_title($property->TitleNoHTML, '-', $property->OrderID);

            $inserted_property = wp_insert_post([
                'post_name' => $property_slug,
                'post_title' => $property->TitleNoHTML,
                'post_type' => 'property', 
                'post_status' => 'publish',
            ]);

            if(is_wp_error($inserted_property)){
                continue;
            }
            $fillable=[
            //Basic information
            get_the_title($inserted_property) => 'TitleNoHTML',
            'REAL_HOMES_property_price'  => 'PriceText',
            'REAL_HOMES_property_size' => 'LandSizeText',
            'REAL_HOMES_property_bedrooms' => 'BedroomsCount',
            'REAL_HOMES_property_bathrooms' => 'BathroomsCount',
            'REAL_HOMES_property_garage' => 'LockUpGaragesCount',
            'REAL_HOMES_featured' => 'FeaturedProperty',
            //$this->REAL_HOMES_property_id = 
            //$this->REAL_HOMES_property_year_built =

            //Location on Map
            'REAL_HOMES_property_address' => 'AddressText',
            'REAL_HOMES_property_location' => 'Suburb',
            'REAL_HOMES_property_map' => 'DisplayTrueAddress',

            //Gallery
            'REAL_HOMES_property_images' => 'PhotoOriginalURL',

            //Floor Plans

            //$this->inspiry_floor_plan_name =
            'inspiry_floor_plan_price' => 'PriceText',
            //$this->inspiry_floor_plan_price_postfix =
            // $this->inspiry_floor_plan_size =
            // $this->inspiry_floor_plan_size_postfix = 
            'inspiry_floor_plan_bedrooms' => 'BedroomsCount',
            'inspiry_floor_plan_bathrooms' =>'BathroomsCount',
            // $this->inspiry_floor_plan_descr = 
            'inspiry_floor_plan_image' => 'FloorplanThumbURL',

            //Property Video
            'inspiry_video_group_image' => 'PhotoThumbURL',
            //$this->inspiry_video_group_title = 
            'inspiry_video_group_url' => 'VideoURL',

            //DEPRECATED FIELDS
            // $this->REAL_HOMES_360_virtual_tour =
            // $this->REAL_HOMES_tour_video_url_divider =
            // $this->REAL_HOMES_tour_video_url =
            // $this->REAL_HOMES_tour_video_image =

            //Agent
            //$this->REAL_HOMES_agent_display_option =
            'REAL_HOMES_agents' => 'ContactAgentName',

            //Energy Performance
            // $this->REAL_HOMES_energy_class  =
            // $this->REAL_HOMES_energy_performance =
            // $this->REAL_HOMES_epc_current_rating =
            // $this->REAL_HOMES_epc_potential_rating =

            //Misc
            // $this->REAL_HOMES_sticky =
            // $this->inspiry_property_label =
            // $this->inspiry_property_label_color =

            // $this->REAL_HOMES_attachments =

            'inspiry_property_owner_name' => 'ClientName',
            //$this->inspiry_property_owner_contact = 
            'inspiry_property_owner_address' => 'ClientAddress',
            // $this->REAL_HOMES_property_private_note =
            // $this->inspiry_message_to_reviewer =

            //Homepage slider
            // $this->REAL_HOMES_add_in_slider = 
            // $this->REAL_HOMES_slider_image =
            // $this->REAL_HOMES_page_banner_image =

            //Additional fields
            'inspiry_InspectionDateandStartTime' => 'ISOInspectionStart',
            'inspiry_InspectionDateandFinishTime' => 'ISOInspectionFinish',             
            ];
            foreach($fillable as $key => $TitleNoHTML){
                update_post_meta($inserted_property, $key, $property->$TitleNoHTML);

            }
        }


        $current_page = $current_page + 1;
        wp_remote_post(admin_url('admin-ajax.php?action=get_properties_from_api'), [
            'blocking' => false,
            'sslverify' => false,
            'body' => [
                'current_page' => $current_page
            ]
        ]);

What I'm already expecting is it should be already save some data, if not, it should produce an error but for some weird reason, there isn't. I tried to var_dump some variables and I think it should be working. Would anyone be able to help me find out where I gone wrong?

1 Ответ

0 голосов
/ 30 октября 2019

Чтобы заменить cron Wordpress реальным заданием cron, вам нужно установить задание cron, которое будет извлекать данные с веб-страницы, используя wget. Сначала вам нужно будет создать страницу Wordpress, которая будет содержать ваш код PHP, а затем извлечь содержимое с помощью cron, используя wget.

Команда реального задания cron будет выглядеть так:

wget -q -O - http://yourdomain.com/your_cron_page >/dev/null 2>&1

-q указывает wget работать тихо (т. Е. Не выводить обычную информацию о состоянии)

-O /dev/null указывает выводить на /dev/null

Имейте в виду, что каждый может получить доступ к этой странице, поэтому вы можете установить некоторые ограничения.

...