Como ler o arquivo de configuração no wordpress ou PHP

4

Não sei ao certo o quão relevante isso é, estou trabalhando com o aplicativo da Web baseado em Java, portanto, em alguns casos, precisamos definir algumas propriedades que podem ser usadas em aplicativos da Web como

  1. Chave da API do Google
  2. Qualquer outro valor de chave

Nós tendemos a definir um arquivo de propriedades com a extensão .properties e a API JAVA fornece uma maneira de ler este arquivo, todos nós precisamos passar o nome da chave para a API e ele retornará o valor.

Ao trabalhar com a API do Wordpress, eu preciso ter esse caso de uso onde eu quero definir essas propriedades para que eu possa lê-los onde eu precisar desses valores, estou ciente de que o WordPress ler dados do seu arquivo de configuração, mas não tenho certeza como.

É isso que estou tentando

  1. Defina um arquivo na pasta do meu tema, diga customProperties
  2. Defina alguns pares de valores-chave dentro do arquivo

e onde eu preciso deles, tudo que eu preciso para passar a chave e deve me devolver o valor associado a ela.

Tenho certeza de que isso pode ser feito com a ajuda do DB, mas estou procurando uma abordagem baseada em arquivos. Uma opção que parece relevante para mim é defini-las no arquivo function.php do meu tema

algum ponteiro para isso?

    
por Umesh Awasthi 24.03.2013 / 11:00

2 respostas

2

Você certamente poderia definir esses valores como constantes do PHP e / ou variáveis globais em, por exemplo, functions.php .

Eu entendo que você iria, neste momento, preferir uma "abordagem baseada em arquivo" do que usar o banco de dados, mas mesmo assim, eu tenho que mencionar que isso seria tanto o padrão quanto a melhor maneira de fazer as coisas.

Dê uma olhada na API de opções do WordPress .

Ainda não entendi bem se você está desenvolvendo um plug-in ou um tema (você marcou a pergunta , mas na própria questão você fala sobre os arquivos do seu tema). De qualquer forma, as opções seriam o caminho a percorrer.

    
por Johannes Pille 24.03.2013 / 11:41
4
  

Estou ciente de que o WordPress lê dados do seu arquivo de configuração, mas não sabe como

Não, o WordPress não "lê" a configuração, o WP a inclui. O WordPress define muitas constantes globais (por exemplo, WP_DEBUG ). Essas constantes globais são acessíveis em todo o script. Você pode fazer da mesma maneira:

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

E no seu functions.php inclua-o com require_once 'my_propperties.php';

Mas este não é o caminho preferido. É arriscado porque você precisa ter certeza de que nenhuma das suas chaves combina com outra constante existente. E com essa solução, você envenenará o namespace global.

Outra solução é usar um único 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;

E acesse os valores com

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

Agora, basta ter certeza de que seu nome de classe não corresponde a um nome de classe existente.

Talvez você não queira criar um contêiner de dados 'estático' e desejar ler os pares de valores-chave de um arquivo. Não tem problema nenhum:

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

    }

}

Aqui eu uso um arquivo com valores simples separados por vírgulas. Outros formatos, como XML, talvez sejam melhores, mas você precisa adicionar uma função para analisar os dados XML.

Você pode criar uma instância do conatiner de dados no arquivo de classe e tornar essa instância 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;

Ou inclua a turma sempre que precisar de um 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 );

Em um script oop, um autoloader é a melhor prática e você não precisa se preocupar em incluir a classe sempre que precisar dela.

Mas, no geral, não é um tópico relacionado ao WordPress real. No Wordpress, você normalmente lê o arquivo propperties, coloca a chave / valores no banco de dados (se já não tiver sido feito) e lê as propriedades do banco de dados. Você pode usar um transiente se não quiser se preocupar com limpezas depois de desativar seu tema / plug-in.

    
por Ralf912 24.03.2013 / 12:24