skip to Main Content

i’ve created a woocommerce plugin,
the plugin itself runs perfectly.
However as long as it takes for it to run, i’m experiencing wierd performances issues.
The website is totally inaccessible(both frontend and backend) ONLY from the browser that is logged in and ran the plugin.
Both frontend and backend are loading until the plugin finishes.
to make things even wierder it’s working perfectly from another browser.

also this is run on a high-end dedicated server and when it’s running the loads on the server are very low.

any clues?

require __DIR__ . '/vendor/autoload.php';
error_reporting(E_ALL);
ini_set('display_errors', 1);
include_once($_SERVER['DOCUMENT_ROOT'].'/wp-config.php');

use AutomatticWooCommerceClient;
$woocommerce = new Client(woocommerce_api_url, api_key, api_secret,['version' => 'wc/v3','timeout' => '99999',]);
echo '<pre>';
$db = new DBfdr();
$i=0;
$page = 1;
$products = [];
$all_products = [];
do{
  try {
    $products = $woocommerce->get('products',array('per_page' => 100, 'page' => $page));
  } catch(HttpClientException $e) {
    die("Can't get products: $e");
  }
  $all_products = array_merge($all_products,$products);
  $page++;


Notes: the DBfdr class contains a simple function for managing pdo connections to the sql server.

2

Answers


  1. Chosen as BEST ANSWER

    The problems occurs because the wp-config.php is included in the beggining.

    wp-config.php in the end has

    require_once(ABSPATH . 'wp-settings.php');
    

    which inits some core wordpress functions which in turn "locks" the session. i managed to fix the issue by removing

    include_once($_SERVER['DOCUMENT_ROOT'].'/wp-config.php');
    

    and replacing it with customs defines


  2. That piece of code doesn’t look so good, why would you need to make a plugin that externally loads wp then going through Woocommerce Client Api to get the list of products and then cycle all of them to make an if condition.

    That would be so much more efficient if you would just pass inside WP standard plugin structure, using global $wpdb class and performing your queries with some join.

    That said, the problem you are facing could be solved by adding this before your code:

    ignore_user_abort( true );
            
    /* Don't make the request block till we finish, if possible. */
    if ( function_exists( 'fastcgi_finish_request' ) && version_compare( phpversion(), '7.0.16', '>=' ) ) {
        fastcgi_finish_request();
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search