Search code examples
wordpresswordpress-rest-api

How to define Wordpress global variable for use in a REST Controller?


I'm extending the WP REST API by writing a Controller class.

I'm trying to read the config for this class from a file, e.g:

{
    "base-namespace": "myapi",
    "version": "v1",
    "resource": "things"
}

This would allow me to keep server and client in sync as they would both use the same config file.

However, I do not want WP to stay reading this file for every request it serves... Currently, if I read this file from anywhere in the plugin file (or any of its required files - including the Controller definition), and if I also echo out where I'm reading, I see it's always passing through that bit of code (including the reading) for every request.

I imagine I need to read this file somewhere outside the plugin itself - make it a global, and then access it when instantiating the Controller.

I'm new to WP - this is the first time dabbling with it. Where should this global variable definition go such that it's only executed once?

Note:

  • I have tried using require_once in my plugin to require a config file which does the file reading. I had put an echo statement there and it shows that that file gets executed for every request (despite the require_once).
  • I have also tried wrapping the file reading in an if(!isset($my_global_var) statement. But adding an echo statement inside the if statement shows that this global variable is always unset with every request served... clearly this needs to go in some kind of WP startup file which only gets executed once.

Thank you.


Solution

  • Store your config data as a PHP array in a .php file and then include it using the PHP include statement. Advanced PHP engines parse the PHP source once and cache a compiled representation of the script so that it does not have to re-parse the PHP sources everytime. So if your data is inside a PHP source file it would be saved in the PHP's engine compiled script cache.

    Of course if your client is non-PHP it would need to have code to parse a PHP array.