Wie man Konfigurationsdatei in WordPress oder PHP liest

Ich bin nicht sicher, wie relevant das ist, ich arbeite mit Java-basierten Web-Anwendung, so in einigen Fällen müssen wir einige Eigenschaften definieren, die in der gesamten Web-Anwendung wie verwendet werden können

  1. Google API-Schlüssel
  2. Irgendein anderer solcher Schlüsselwert

Wir neigen dazu, eine Eigenschaftendatei mit der Erweiterung .properties zu definieren, und die JAVA-API bietet eine Möglichkeit, diese Datei zu lesen. Alles, was wir brauchen, um den Schlüsselnamen an die API zu übergeben, gibt den Wert zurück.

Während ich mit WordPress API arbeite, muss ich einen solchen Anwendungsfall haben, wo ich solche Eigenschaften definieren möchte, damit ich sie lesen kann, wo immer ich diese Werte brauche, ich weiß, dass WordPress Daten aus seiner Konfigurationsdatei liest, aber nicht sicher wie.

Das ist es, was ich versuche

  1. Definieren Sie eine Datei in meinem Themenordner, sagen Sie customProperties
  2. Definieren Sie einige Schlüsselwertpaare in der Datei

und dann, wo ich sie brauche, muss ich den Schlüssel weitergeben und mir den damit verbundenen Wert zurückgeben.

Ich bin mir sicher, dass dies mit Hilfe der DB gemacht werden kann, aber ich suche nach einem dateibasierten Ansatz. Eine Option, die mir relevant erscheint, ist die Definition in der function.php Datei meines Themas

Irgendein pointers dafür?

Solutions Collecting From Web of "Wie man Konfigurationsdatei in WordPress oder PHP liest"

Sie könnten diese Werte natürlich als PHP-Konstanten und / oder globale Variablen definieren, zum Beispiel in functions.php .

Ich verstehe, dass Sie an dieser Stelle lieber einen “dateibasierten Ansatz” wählen würden, als die database zu verwenden, aber nichtsdestotrotz muss ich erwähnen, dass dies sowohl der Standard als auch der beste Weg wäre.

Sehen Sie sich die WordPress Options API an .

Ich habe nicht ganz verstanden, ob Sie ein Plugin oder ein Thema entwickeln (Sie haben die Frage Plugin-Entwicklung markiert, aber in der Frage selbst sprechen Sie von den Dateien Ihres Themes).
Auf jeden Fall wären Optionen der richtige Weg.

Mir ist bewusst, dass WordPress Daten aus seiner Konfigurationsdatei liest, aber nicht sicher ist, wie

Nein, WordPress liest die Konfiguration nicht, WP enthält sie. WordPress definiert viele globale Konstanten (zB WP_DEBUG ). Diese globalen Konstanten sind im gesamten Skript verfügbar. Sie können es auf die gleiche Weise tun:

 $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 ); } 

Und in Ihrer functions.php enthalten Sie es mit require_once 'my_propperties.php';

Aber das ist nicht der bevorzugte Weg. Es ist riskant, weil Sie sicher sein müssen, dass keiner Ihrer Schlüssel mit einer anderen vorhandenen Konstante übereinstimmt. Und mit dieser Lösung werden Sie den globalen Namespace vergiften.

Eine andere Lösung besteht darin, ein einzelnes Objekt zu verwenden.

 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; 

Und auf die Werte zugreifen mit

 global $my_data_container; $key_one = $my_data_container->key_one; $const_three = $my_data_container::KEY_THREE; 

Jetzt müssen Sie nur sicher sein, dass Ihr classnname nicht mit einem vorhandenen classnnamen übereinstimmt.

Vielleicht möchten Sie keinen ‘statischen’ Datencontainer erstellen und möchten die Schlüssel / Wert-Paare aus einer Datei lesen. Überhaupt kein Problem:

 < ?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 ); } } } 

Hier verwende ich eine Datei mit einfachen Komma-getrennten Werten. Andere Formate wie XML sind vielleicht besser, aber Sie müssen eine function hinzufügen, um die XML-Daten zu parsen.

Sie können eine Instanz des Datenkontainers in der classndatei erstellen und diese Instanz global machen.

 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; 

Oder schließen Sie die class immer dann ein, wenn Sie einen Wert benötigen.

 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 ); 

In einem OOP-Skript ist ein Autoloader die beste Vorgehensweise, und Sie müssen sich nicht darum kümmern, die class jedes Mal einzubeziehen, wenn Sie einen Wert benötigen.

Aber alles in allem ist es kein echtes WordPress-Thema. In WordPress liest man normalerweise die Datei propperties, legt die Schlüssel / Werte in die database (falls noch nicht geschehen) und liest die Eigenschaften aus der database. Sie können einen Transient verwenden, wenn Sie nach der Deaktivierung Ihres Themas / Plugins nicht an Aufräumarbeiten interessiert sind.