Cron tasks
-
@girish As I don't understand anything about php, I don't really know what's going on.
Is the error you're seeing something on our side or is the side of plugin guys?
@mdreira I don't understand either. It seems that global variables get reset immediately after
global xx
when using WP CLI. I don't get why. -
@girish As I don't understand anything about php, I don't really know what's going on.
Is the error you're seeing something on our side or is the side of plugin guys?
@mdreira OK, I found the issue. The usage of
global
is incorrect in the plugin. Theglobal
keyword is for stating the use of a global variable (as opposed to 'make this variable global').With that in mind, the code in the plugin's constant.php is like this:
<?php $OIWE_API_URL = "http://apiv1.optimizador.io:80/"; global $OIWE_API_URL ;
The above code will break when the above file is included from a "function". This is the case when we use WP CLI where entire WordPress is loaded into a function. So, for example, the rough equivalent is:
function load() { require_once(".../constants.php"); }
When it's like above, the
global $OIWE_API_URL
keyword then says, useOIWE_API_URL
from global context, which is not the same as the one you defined one line above (it's a function local variable). So, the solution is to move the global keyword before setting it in constants.php. Like this:global $OIWE_API_URL ; $OIWE_API_URL = "http://apiv1.optimizador.io:80/"; // .. do same for other constants in the file ..
Of course, this is why globals are not used in WP plugins. You should use superglobals like $GLOBAL or define or database etc. See https://codex.wordpress.org/Global_Variables and https://onlinewebtutorblog.com/wordpress-global-variables-step-by-step-complete-guide/
-
@mdreira OK, I found the issue. The usage of
global
is incorrect in the plugin. Theglobal
keyword is for stating the use of a global variable (as opposed to 'make this variable global').With that in mind, the code in the plugin's constant.php is like this:
<?php $OIWE_API_URL = "http://apiv1.optimizador.io:80/"; global $OIWE_API_URL ;
The above code will break when the above file is included from a "function". This is the case when we use WP CLI where entire WordPress is loaded into a function. So, for example, the rough equivalent is:
function load() { require_once(".../constants.php"); }
When it's like above, the
global $OIWE_API_URL
keyword then says, useOIWE_API_URL
from global context, which is not the same as the one you defined one line above (it's a function local variable). So, the solution is to move the global keyword before setting it in constants.php. Like this:global $OIWE_API_URL ; $OIWE_API_URL = "http://apiv1.optimizador.io:80/"; // .. do same for other constants in the file ..
Of course, this is why globals are not used in WP plugins. You should use superglobals like $GLOBAL or define or database etc. See https://codex.wordpress.org/Global_Variables and https://onlinewebtutorblog.com/wordpress-global-variables-step-by-step-complete-guide/
-
@girish Then.. what should I do?.
Do I have to tell the plugin guys that they should move the globals in constants.php file or rather use superglobals?
I have no idea how to tell them this. Can we do something from our side?
@mdreira said in Cron tasks:
@girish Then.. what should I do?.
Sorry, I wasn't clear. Please send the plugin authors the link to my comment. There is nothing we can do, they have to fix the plugin. They can easily reproduce this by running cron tasks using the WP CLI tool outside Cloudron. WP CLI is pretty much part of standard WP - https://make.wordpress.org/cli/handbook/
-
@mdreira said in Cron tasks:
@girish Then.. what should I do?.
Sorry, I wasn't clear. Please send the plugin authors the link to my comment. There is nothing we can do, they have to fix the plugin. They can easily reproduce this by running cron tasks using the WP CLI tool outside Cloudron. WP CLI is pretty much part of standard WP - https://make.wordpress.org/cli/handbook/
-
@mdreira said in Cron tasks:
@girish Then.. what should I do?.
Sorry, I wasn't clear. Please send the plugin authors the link to my comment. There is nothing we can do, they have to fix the plugin. They can easily reproduce this by running cron tasks using the WP CLI tool outside Cloudron. WP CLI is pretty much part of standard WP - https://make.wordpress.org/cli/handbook/
@girish Just one more question. I guess the problem with global variables is not only in constants.php file, right? Surely there are several files that are involved...
I'm saying this, because I've repositioned the variables in constants.php file like you said, and it still doesn't work.
-
@girish Just one more question. I guess the problem with global variables is not only in constants.php file, right? Surely there are several files that are involved...
I'm saying this, because I've repositioned the variables in constants.php file like you said, and it still doesn't work.
@mdreira TBH, I was only "guessing" what the solution might be after identifying the issue. I don't 100% know for sure if it solves the issue. Are you getting the same error? Did the plugin authors have any comments?
-
@mdreira TBH, I was only "guessing" what the solution might be after identifying the issue. I don't 100% know for sure if it solves the issue. Are you getting the same error? Did the plugin authors have any comments?
@girish What I did was modify the constants file like this:
Then I ran the cron:
This time it didn't give any specific error message.
The plugin guys just thanked us for the feedback. I still don't have any concrete answer from them.
-
@girish What I did was modify the constants file like this:
Then I ran the cron:
This time it didn't give any specific error message.
The plugin guys just thanked us for the feedback. I still don't have any concrete answer from them.
@mdreira I think one has to debug that plugin more to find other issues, I only found on of the main issues TBH. It's clear the plugin is not designed to work with WP CLI, so I think that it won't work inside Cloudron unless they fix the plugin.
I think if you really need this exact plugin, you have to switch to LAMP stack and then configure cron as however it works with this plugin. Another idea is to maybe make it possible to disable Cloudron's cron and use WP_CRON but this is not really an option for production sites.
-
@mdreira I think one has to debug that plugin more to find other issues, I only found on of the main issues TBH. It's clear the plugin is not designed to work with WP CLI, so I think that it won't work inside Cloudron unless they fix the plugin.
I think if you really need this exact plugin, you have to switch to LAMP stack and then configure cron as however it works with this plugin. Another idea is to maybe make it possible to disable Cloudron's cron and use WP_CRON but this is not really an option for production sites.