Comment lire le fichier de configuration dans WordPress ou PHP

4

Je ne sais pas si cela est pertinent, je travaille avec une application Web basée sur Java. Dans certains cas, nous devons définir des propriétés pouvant être utilisées dans une application Web entière, comme

.
  1. clé Google API
  2. Toute autre valeur de clé de ce type

Nous avons tendance à définir un fichier de propriétés portant l'extension .properties. Par ailleurs, l'API JAVA fournit un moyen de lire ce fichier. Tout ce dont nous avons besoin pour passer le nom de clé à l'API et lui renvoyer la valeur.

Lorsque je travaille avec l'API Wordpress, j'ai besoin d'un cas d'utilisation où je veux définir de telles propriétés pour pouvoir les lire à tout moment si j'ai besoin de ces valeurs. Je sais que WordPress lit les données de son fichier de configuration, mais je ne suis pas sûr. comment.

C'est ce que j'essaie

  1. Définissez un fichier dans mon dossier de thème, par exemple, customProperties
  2. .
  3. Définissez des paires de valeurs de clé dans le fichier

et que là où j'en ai besoin, tout ce dont j'ai besoin pour passer la clé et il devrait me renvoyer la valeur qui y est associée.

Je suis sûr que cela peut être fait avec l'aide de DB, mais je recherche une approche basée sur les fichiers. Une option qui me semble pertinente consiste à définir ceux-ci dans le fichier function.php de mon thème

.

un pointeur pour cela?

    
posée Umesh Awasthi 24.03.2013 - 11:00

2 réponses

2

Vous pouvez certainement définir ces valeurs comme constantes PHP et / ou variables globales dans, par exemple, functions.php .

Je crois comprendre que vous préféreriez à présent utiliser une "approche basée sur les fichiers" plutôt que d'utiliser la base de données, mais je dois néanmoins mentionner que ce serait à la fois la norme et la meilleure façon de procéder.

Consultez l'API Options WordPress .

Je n'ai pas bien compris si vous développez un plugin ou un thème (vous avez tagué la question , mais dans la question vous parlez des fichiers de votre thème).
En tout état de cause, les options seraient la voie à suivre.

    
réponse donnée Johannes Pille 24.03.2013 - 11:41
4
  

Je suis conscient que WordPress lit les données de son fichier de configuration, mais je ne sais pas comment

Non, WordPress ne "lit" pas la configuration, WP l’inclut. WordPress définit un grand nombre de constantes globales (par exemple WP_DEBUG ). Ces constantes globales sont accessibles partout dans le script. Vous pouvez le faire de la même manière:

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

Et dans votre functions.php , incluez-le avec require_once 'my_propperties.php';

Mais ce n’est pas le moyen préféré. C'est risqué car vous devez vous assurer qu'aucune de vos clés ne correspond à une autre constante existante. Et avec cette solution, vous allez empoisonner l’espace de noms global.

Une autre solution consiste à utiliser un seul objet.

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;

Et accédez aux valeurs avec

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

Vous devez maintenant vous assurer que votre nom de classe ne correspond pas à un nom de classe existant.

Peut-être que vous ne voulez pas créer un conteneur de données 'statique' et que vous voulez lire les paires clé-valeur à partir d'un fichier. Pas de problème du tout:

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

    }

}

Ici, j'utilise un fichier avec des valeurs séparées par des virgules simples. D'autres formats tels que XML sont peut-être meilleurs, mais vous devez ajouter une fonction pour analyser les données XML.

Vous pouvez créer une instance du conatiner de données dans le fichier de classe et rendre cette instance globale.

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;

Ou incluez la classe à chaque fois que vous avez besoin d'une valeur.

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

Dans un script oop, un autochargeur est la meilleure pratique et vous n'avez pas à vous soucier d'inclure la classe à chaque fois que vous avez besoin d'une valeur.

Mais dans l’ensemble, ce n’est pas un vrai sujet lié à WordPress. Dans Wordpress, vous lisez normalement le fichier de propriétés, placez la clé / les valeurs dans la base de données (si cela n’a pas déjà été fait) et lisez les propriétés à partir de la base de données. Vous pouvez utiliser un transitoire si vous ne voulez pas vous soucier des nettoyages après avoir désactivé votre thème / plugin.

    
réponse donnée Ralf912 24.03.2013 - 12:24

Lire d'autres questions sur les étiquettes