// ORIGINAL CODE
class Zone_List_Table extends WP_List_Table {
function __construct(){
global $status, $page;
//Set parent defaults
parent::__construct( array(
'singular' => 'zone',
'plural' => 'zones',
'ajax' => false
) );
$this->shipping_zones = get_option( 'be_woocommerce_shipping_zones' );
/* ISSUE
* In some circumstances, at this point $this->shipping_zones is NULL,
* even if get_option() returns a value. I ran extensive tests, in
* some cases the following statement
* var_dump(
* get_option( 'be_woocommerce_shipping_zones' ),
* $this->shipping_zones
* )
*
* returns an array, followed by NULL, when the two values should instead
* match.
*
* POSSIBLE CAUSES
* I could not find the exact cause of the issue, but it seems to have
* something to do with the WP_List_Table__set() and __get() magic
* methods. Since property $shipping_zones does not exist, the magic
* methods are fired and return incorrect values.
*
* SOLUTION
* Declare the $shipping_zones property explicitly (see below).
*/
}
// FIXED CODE
class Zone_List_Table extends WP_List_Table {
// @var array An array containing the shipping zones
public $shipping_zones;
function __construct(){
global $status, $page;
//Set parent defaults
parent::__construct( array(
'singular' => 'zone',
'plural' => 'zones',
'ajax' => false
) );
$this->shipping_zones = get_option( 'be_woocommerce_shipping_zones' );
}
Comments