我知道WordPress从其配置文件中读取数据,但不确定如何读取
不,WordPress不“读取”配置,WP包括它。WordPress定义了许多全局常量(例如。WP_DEBUG
). 这个全局常量在脚本中都可以访问。您可以使用相同的方法:
$key_values = array(
\'key_one\' => \'value_one\',
\'key_two\' => \'value_two\',
\'key_3\' => 3,
);
foreach ( $key_value as $key => $value ) {
if ( ! defined( $key ) )
define( $key, $value );
}
在你的
functions.php
将其包含在
require_once \'my_propperties.php\';
但这不是首选的方式。这是有风险的,因为您必须确保没有任何键与另一个现有常量匹配。使用此解决方案,您将毒害全局命名空间。
另一种解决方案是使用单个对象。
class My_Container_For_Data
{
public $key_one = \'value_one\';
public $key_two = \'value_two\';
const KEY_THREE = 3;
}
global $my_data_container;
$my_data_container = new My_Container_For_Data;
并使用访问值
global $my_data_container;
$key_one = $my_data_container->key_one;
$const_three = $my_data_container::KEY_THREE;
现在您只需确保您的类名与现有的类名不匹配。
也许您不想创建“静态”数据容器,而是想从文件中读取键值对。没问题:
<?php
/*
* content of file data_csv.propperties:
*
* key_one,value_one
* key_two,value_two
* key_3,3
*
*/
class My_Data_Container
{
public static $propperties_file = \'data_csv.propperties\';
public static $data = array();
public function __construct() {
// maybe add some path info to $propperties_file
if ( empty( self::$data ) )
$this->read_propperties();
}
public function __get( $key ) {
return ( isset( self::$data[ $key ] ) ) ?
self::$data[ $key ] : false; // or null, or trigger error, or ...
}
public function __set( $key = \'\', $value = null ) {
if ( empty( $key ) )
return false;
else
$key = (string) $key;
self::$data[ $key ] = $value;
}
protected function read_propperties() {
$handle = fopen( self::$propperties_file, \'r\' );
if ( false != $handle ) {
while ( $data = fgetcsv( $handle, 1024, \',\' ) ) {
$this->$data[0] = $data[1];
}
} else {
trigger_error( \'Could not open propperties file\', E_USER_ERROR );
}
}
}
在这里,我使用一个具有简单逗号分隔值的文件。其他格式(如XML)可能更好,但您必须添加一个函数来解析XML数据。
您可以在类文件中创建数据容器的实例,并使该实例成为全局实例。
require_once \'class-my_data_contaner.php\';
global $data_container;
$data_container = new My_Data_Container;
// some other file
global $data_container;
$key1 = $data_container->key_one;
或者在每次需要值时都包含该类。
require_once \'path/to/class-my_data_container.php\';
$data_container = new My_Data_Container();
$key1 = $data_container->key_one;
var_dump( $key1 );
var_dump( $data_container::$data );
在oop脚本中,自动加载器是最佳实践,您无需每次需要类的值时都考虑将其包含在内。
但总而言之,这并不是一个真正与WordPress相关的话题。在Wordpress中,您通常读取属性文件,将键/值放入数据库(如果尚未完成),然后从数据库中读取属性。如果不想在停用主题/插件后进行清理,可以使用瞬态。