Cómo leer el archivo de configuración en wordpress o PHP

4

No estoy seguro de cuán relevante es esto, estoy trabajando con una aplicación web basada en Java, por lo que en algunos casos necesitamos definir algunas propiedades que se pueden usar en una aplicación web completa como

  1. Clave de la API de Google
  2. Cualquier otro valor clave de este tipo

Tendemos a definir un archivo de propiedades con extensión .properties y, a continuación, la API de JAVA proporciona una forma de leer este archivo, todo lo que necesitamos para pasar el nombre de clave a la API y devolverá el valor.

Al trabajar con la API de Wordpress, necesito tener un caso de uso en el que quiera definir dichas propiedades para poder leerlas donde sea que necesite esos valores, soy consciente de que WordPress lee datos de su archivo de configuración pero no estoy seguro cómo.

Esto es lo que estoy tratando

  1. Defina un archivo en mi carpeta de temas, por ejemplo, CustomProperties
  2. Defina algunos pares de valores clave dentro del archivo

y en el lugar en el que los necesito, todo lo que necesito para pasar la clave y me debe devolver el valor asociado.

Estoy seguro de que esto se puede hacer con la ayuda de DB, pero estoy buscando un enfoque basado en archivos. Una opción que me parece relevante es definirlas en el archivo function.php de mi tema

cualquier puntero para esto?

    
pregunta Umesh Awasthi 24.03.2013 - 11:00

2 respuestas

2

Ciertamente, podría definir esos valores como constantes de PHP y / o variables globales en, por ejemplo, functions.php .

Entiendo que, en este punto, preferiría utilizar un "enfoque basado en archivos" en lugar de utilizar la base de datos, pero, no obstante, debo mencionar que esa sería la norma y la mejor manera de hacer las cosas.

Eche un vistazo a la API de opciones de WordPress .

No he entendido bien si estás desarrollando un complemento o un tema (has marcado la pregunta , pero en la pregunta en sí habla de los archivos de su tema).
En cualquier caso, las opciones serían el camino a seguir.

    
respondido por el Johannes Pille 24.03.2013 - 11:41
4
  

soy consciente de que WordPress lee datos de su archivo de configuración pero no estoy seguro de cómo

No, WordPress no 'lee' la configuración, WP la incluye. WordPress define muchas constantes globales (por ejemplo, WP_DEBUG ). Estas constantes globales son accesibles en todo el script. Puedes hacerlo de la misma manera:

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

Y en tu functions.php inclúyelo con require_once 'my_propperties.php';

Pero esta no es la forma preferida. Es arriesgado porque debe asegurarse de que ninguna de sus claves coincida con otra constante existente. Y con esta solución, envenenará el espacio de nombres global.

Otra solución es usar un solo objeto.

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;

Y accede a los valores con

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

Ahora solo debe asegurarse de que su nombre de clase no coincida con un nombre de clase existente.

Tal vez no desee crear un contenedor de datos 'estáticos' y quiera leer los pares clave-valor de un archivo. No hay problema en absoluto:

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

    }

}

Aquí utilizo un archivo con valores separados por comas simples. Otros formatos como XML son quizás mejores, pero debes agregar una función para analizar los datos XML.

Puedes crear una instancia del combinador de datos en el archivo de clase y hacer que esta instancia sea global.

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;

O incluya la clase cada vez que necesite un valor.

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

En un script oop, un autocargador es la mejor práctica y no tiene que preocuparse por incluir la clase cada vez que necesite un valor de ella.

Pero en general, no es un tema real relacionado con WordPress. En Wordpress, normalmente lee el archivo de propiedades, coloca la clave / valores en la base de datos (si aún no se ha hecho) y lee las propiedades de la base de datos. Puede usar un transitorio si no quiere preocuparse por las limpiezas después de desactivar su tema / complemento.

    
respondido por el Ralf912 24.03.2013 - 12:24

Lea otras preguntas en las etiquetas