A Better WordPress Plug-in Boilerplate

TLDR

Configuramos um padrão de plug-in para WordPress que fornece muitas funcionalidades que tivemos que incluir em praticamente todos os plug-ins. Confira: WordPress Plug-in Boilerplate

The Backstory

Acabamos escrevendo muitos plug-ins para vários sites WordPress e descobrimos que muito do código que precisamos para ativação, desativação e desinstalação é repetido e acabamos copiando-o de um plug-in anterior ou reescrevendo-o, tornando melhorias incrementais ao longo do tempo.

Nós nos cansamos disso, então eu escrevi um clichê de plug-in simples que nos permite fazer alguns Localizar / Substituir e começar a trabalhar na lógica real de nosso plug-in.

As pastas padrão podem não ser perfeitas para como você gosta de organizar seu código, então sinta-se encorajado a bifurcá-lo e criar seu próprio clichê.

O código é muito comentado e tem muitos blocos que irão guiá-lo através da conversão do clichê em seu próprio plug-in, caso você seja novo no desenvolvimento de plug-ins do WordPress.

Você pode encontrá-lo aqui: WordPress Plug-in Boilerplate

EDIT : Terminei a documentação e incluí-a aqui para que você tenha uma ideia do que ela faz por você.

Funcionalidade

Em primeiro lugar, você desejará substituir as instâncias de “Plugin_Name” ou qualquer derivação delas pelo nome do seu plugin real. Eu geralmente renomeio os arquivos para que os nomes também reflitam o nome do meu plugin./assets/classes/

Prefixo do plugin

Defina um prefixo na classe Opções de nome de plug-in para seus nomes de opções, nomes de tabelas, recursos, slugs de página, etc. para que você só precise escrevê-lo uma vez:

//prefix for option names, table names, and capability names
public $prefix = 'plugin_name_';

Você pode usar o método da classe Plugin_Name para anexar esse prefixo a qualquer string.$this->fix_name($slug)

Se quiser fazer referência ao prefixo na classe Plugin_Name, você pode fazer referência a ele como .$this->options->prefix

Plugin Debug Namespace

Defina um namespace na classe Opções de nome de plug-in para ser anexado a todas as mensagens que seu plug-in enviar para debug.log para que você possa localizar facilmente suas instruções de depuração no log.

//namespace for any Debug messages
public $namespace = 'PLUGIN NAME';

Se você usar o método na classe Plugin Name, poderá enviar a ele um namespace personalizado ou o namespace definido na classe Plugin Name_Options será usado.$this->log($msg, $namespace)

Se quiser fazer referência ao namespace na classe Plugin_Name, você pode fazer referência a ele como .$this->options->namespace

Capacidades

Defina recursos na classe Opções de nome de plug-in , adicionando-os à matriz associativa no método.set_capabilities()

A chave de array para um conjunto de recursos deve ser o recurso necessário que uma função precisa para que seu recurso seja adicionado.

No exemplo abaixo, estamos adicionando um recurso que requer o manage_optionsrecurso. NOTA : Estamos usando o prefixo do nosso plugin para o nome do recurso$this->prefix

//set up capability array
private function set_capabilities() {
//add capabilities to this array as 'required_capability' => array('capability_to_grant')
$this
->caps = array(
'manage_options' => array(
$this
->prefix . 'capability'
)
);
}

I geralmente se referem a esses recursos quando adicionar páginas de administração ou verificar o acesso do usuário por referindo-se a sua chave de matriz: .$this->options->caps['manage_options'][0]

Se você tiver vários recursos, poderá configurar um mapeamento de array de slugs de capacidade e referenciá-los dessa forma.

No futuro, posso passar a usar um slug para cada chave de recursos e mapeá-los para um ponto de referência mais simples.

Opções

Defina opções na classe Opções de nome de plug-in , adicionando-as ao array associativo .$this->opts

A matriz de opções será codificada e decodificada em JSON ao ser armazenada e recuperada do banco de dados.

//set up options array
private function set_options() {
$this
->opts = array(
$this
->prefix . 'version' => $this->v_num,
$this
->prefix . 'options' => array(

//add options to this array as 'option_name' => 'option_value'
//this allows us to only store two options in the table
//one will keep our version number and the other will keep a JSON encoded
//string of all of our other options

)
);
}

Para aceder a qualquer uma das opções na classe PLUGIN_NAME, você pode referenciá-los como este: .$this->options->opts['slug']

Para acessar os valores das opções atuais na classe PLUGIN_NAME, você pode fazer referência a matriz definições: .$this->settings['slug']

Mesas

Defina tabelas na classe Plugin Name Options adicionando-as ao array associativo .$this->tables

//set up table array
private function set_tables() {
//set the table name slug as a key for the $this->tables array
//and add the MySQL CREATE statement as the value for that key
$this
->tables['main'] = "CREATE TABLE `" . $this->prefix . 'main' . "` (
`ID` int(15) NOT NULL AUTO_INCREMENT,

`column_name` varchar(255),

PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1"

;
}

Para acessar os nomes de tabela na classe PLUGIN_NAME, você pode referenciá-los como este: .$this->tables['slug']

Atualizando

Se você precisar realizar manutenção ao atualizar seu plugin, vincule ao método na classe Plugin_Name.pre_update_option()

Há um comentário que começa //IMPORTANTa mostrar onde injetar seu código de atualização.

Repositório de plug-ins do WordPress

Certifique-se de preencher o antes de enviar para o repositório do WordPress e incluir algumas capturas de tela, se puder.readme.txt

Aqui está um link para o exemplo do WordPress : http://wordpress.org/plugins/about/readme.txtreadme.txt

Implantando

Então, você deseja hospedar seu plug-in no GitHub, mas também disponibilizá-lo no Repositório de Plug-ins do WordPress? Sem problemas.

Incluí uma versão do script encontrada aqui: https://gist.github.com/BFTrick/3767319deploy.sh

Tudo o que você precisa fazer é editar o script para refletir as informações de SVN para seu plug-in WordPress e, em seguida, navegar até a pasta de seu plug-in e digitar e deixar o script fazer sua mágica../deploy.sh

Algumas notas sobre a implantação:

  • O script é bastante literal em sua leitura do comentário do cabeçalho do plug-in, então não mexa com sua formatação ou posicionamento.
  • O script criará tags para você com base no número da versão no comentário do cabeçalho do plug-in e na versão de lançamento do seu, então certifique-se de que sejam iguais.readme.txt
  • O script enviará o branch master e a tag mais recente ao GitHub para que você não precise se preocupar em fazer push antes de implantar.
  • WordPress (ou SVN, não tenho certeza qual) não parece como letras em seus números de versão, então eu ficar com formato de versionamento semântico: , , etc.0.0.10.0.2
  • Você deve adicionar ao seu ( eu recomendo globalmente ) para que você não dê a ninguém acesso para implantar seu plugin.deploy.sh.gitignore

Comentários

Informe-nos se tiver alguma ideia para melhorias ou perguntas sobre a funcionalidade que ele fornece. Eu gostaria de continuar melhorando isso.