web-dev-qa-db-fra.com

Comment lire le fichier de configuration dans wordpress ou PHP

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 clé de ce type

Nous avons tendance à définir un fichier de propriétés avec l'extension .properties et que l'API Java fournit un moyen de lire ce fichier. Il suffit de passer le nom de la clé à l'API et de renvoyer la valeur.

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

C'est ce que j'essaye

  1. Définir un fichier dans mon dossier de thème, par exemple, customProperties
  2. Définir des paires de valeurs clés à l'intérieur du fichier

et que là où j’ai besoin d’eux, tout ce dont j’ai besoin pour passer la clé et il devrait me retourner 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 est de définir ceux-ci dans le fichier function.php de mon thème.

un pointeur pour cela?

4
Umesh Awasthi

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

Si je comprends bien, à ce stade-ci, vous préféreriez une "approche basée sur les fichiers" à une 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.

Jetez un coup d’œil à la Options API WordPress .

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

2
Johannes Pille

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 la manière préférée. 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éder 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. Aucun 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 comme 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 en 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 la désactivation de votre thème/plugin.

5
Ralf912