получение проблемы с таймаутом шлюза 504 из плагина настраиваемого типа записи - PullRequest
0 голосов
/ 13 июля 2020

Я создал плагин, который извлекает некоторые данные из API и создает пользовательские сообщения. Плагин работает правильно, поскольку он извлекает и правильно добавляет сообщения, как показано в следующем коде. Проблема, с которой я столкнулся, заключается в том, что этот плагин выполняет слишком много запросов и приводит к ошибке 504 gateway timeout nginx.

Мой подход заключался в том, чтобы запускать функцию выборки до тех пор, пока не станут доступны массивы или пустой массив, и остановит процесс .

    if( !is_array($experts[0]->users) || empty($experts[0]->users)){
          return false;
    }

Но похоже, что функция работает бесконечно и приводит к проблеме тайм-аута шлюза 504. Я предполагаю, что эти строки в конструкторе вызывают проблему.

add_action('init',array($this, 'get_expertsdup_from_api'));
add_action('wp_ajax_nopriv_get_expertsdup_from_api','get_expertsdup_from_api');
add_action('wp_ajax_get_expertsdup_from_api','get_expertsdup_from_api');

Это потому, что я вызываю get_expertsdup_from_api в конструкторе?

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

<?php
    /**
     * Plugin Name: Experts Duplicate
     * Description: Wordpress plugin for Experts.
     * Version: 1.2
     * Author: TestName
     */
    
    if (!defined('ABSPATH'))
    {
        die;
    }
    
    class SerwExpertsDupPlugin 
    {
        function __construct()
        {
            add_action('init',array($this, 'custom_post_type'));
            add_action('init',array($this, 'get_expertsdup_from_api'));
            add_action('wp_ajax_nopriv_get_expertsdup_from_api','get_expertsdup_from_api');
            add_action('wp_ajax_get_expertsdup_from_api','get_expertsdup_from_api');
           
        }
        
        function expert_activate()
        {
            $this->custom_post_type();
            
        }
    
        function expert_deactivate()
        {   
           
        }
    
        function expert_uninstall()
        {
    
        }
    
        function custom_post_type()
        {
          register_post_type(
                'expert-dup',[
                'public' => true, 
                'label' => 'ExpertsDuplicate',
                'capability_type' => 'post',
                'rewrite' => array( 'slug' => '/' ),
                'supports' => array( 'title','editor','thumbnail' )
                ]);
    
            
        }
    
        function get_expertsdup_from_api()
        {
            
            $skip = ( !empty($_POST['skip'])) ? $_POST['skip'] : 0; 
            $experts = [];
            $results = wp_remote_retrieve_body(wp_remote_get('https://myapi/v1/users?take=10&isOwner=true&basic=true&skip=' . $skip));
            $results = json_decode($results);
            $experts[] = $results;
            
            if( !is_array($experts[0]->users) || empty($experts[0]->users)){
                return false;
            }
            
            foreach($experts[0] as $expert)
            {
                foreach($expert as $profile)
             {
                 
                $owner_profile = $profile->ownerProfile;
                $expert_slug = sanitize_title($owner_profile->username);
                $existing_expert = get_page_by_path($expert_slug, 'OBJECT', 'expert-dup');
               
                if($existing_expert === null && $expert_slug !== "")
                {
                    $inserted_expert = wp_insert_post([
                        'post_name' => $service_slug,
                        'post_title' => $expert_slug,
                        'post_type' => 'expert-dup',
                        'post_status' => 'publish',
                        'post_content' => '[md-react-app]'
                    ]);
                
                
        
                    if(is_wp_error($inserted_expert))
                    {
                        continue;
                    }
                }
                
             }
            }
            $skip = $skip + 10;
            wp_remote_post(admin_url('admin-ajax.php?action=get_expertsdup_from_api'),[
                'blocking' => false,
                'sslverify' => false,
                'body' => [
                    'skip' => $skip
                ]
            ]);
            
        }
    
    }
    
    if(class_exists('SerwExpertsDupPlugin'))
    {
        $serwExpertsDupPlugin = new SerwExpertsDupPlugin();
    }
    
    //activation
    register_activation_hook(__FILE__,array($serwExpertsDupPlugin, 'expert_activate'));
    
    //deactivation
    register_deactivation_hook(__FILE__,array($serwExpertsDupPlugin, 'expert_deactivate'));
    
    //uninstall
    register_uninstall_hook(__FILE__,array($serwExpertsDupPlugin, 'expert_uninstall'));

    
...