A diferença entre o arquivo do plug-in (principal) e a lesma do plug-in é um local em que o Codex do WordPress poderia fazer muito melhor. Entendo sua confusão como a senti muito recentemente (misturada com frustração).
Foi isso que aprendi fazendo um "trabalho de detetive" no código principal do WordPress.
O arquivo de plug-in
Esta é a maneira única que o WordPress identifica e registra um plug-in. É composto pelo diretório do plugin E pelo arquivo principal do plugin (aquele com o cabeçalho do arquivo que contém os vários detalhes do plugin, como versão, autor etc.).
Seria algo como isto: your-plugin-directory/main-file.php
Se você olhar para os dados dos plug-ins ativos (retornados por get_option( 'active_plugins' )
), verá que o WordPress precisa apenas desse arquivo de plug-in para identificar corretamente os plug-ins.
Você pode optar por pensar nele como o caminho relativo do arquivo principal do plug-in (em relação ao wp-content/plugins/
diretório que está). Você pode "compor" o caminho absoluto do arquivo principal do plugin com algo como isto:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file
O próprio núcleo gera o arquivo de plug-in assim:
$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );
A lesma do plugin
É de se esperar que o "slug" do plugin seja algum tipo de ID padronizado para o plugin, como o post slug é para posts - então você pode usar esse "slug" para fornecê-lo às principais funções do WordPress e fazer as coisas acontecerem.
Na verdade não. Depois de pesquisar no núcleo por referências a lesmas de plug-in (ou temas para o que importa) e encontrar quase nada, acho que tenho uma noção disso.
As únicas lesmas reais são aquelas para coisas acessíveis através de uma URL única: postagens, páginas, taxonomias etc. Esse é o objetivo de pegar o nome de algo (como o título de uma postagem) e gerar uma versão amigável da URL: usar em um URL.
Mas onde usamos "lesmas" de tema / plugins em URLs?
Não fazemos isso em instalações individuais do WordPress - nem no administrador do WP nem no frontend.
No entanto, há um lugar muito emaranhado com o código do WordPress , o site WordPress.org. As pessoas têm dificuldade em distinguir entre os dois, incluindo o fato de que, de alguma forma, é comum entre os desenvolvedores considerar o tema do WordPress.org ou as lesmas de plug-in que devem funcionar da mesma forma que uma publicação ou lesma de página.
Eles servem ao mesmo objetivo, mas em sites separados . No WordPress.org, eles são usados para identificar exclusivamente um tema de outros e um plug-in do restante (em URLs como https://wordpress.org/plugins/akismet/
).
Mas quando se trata de instalações individuais do WordPress, a mesma exclusividade não pode ser garantida, porque não há autoridade para aplicá-lo (como no WordPress.org). Poderia funcionar se todos os plugins e temas viessem do WordPress.org, mas felizmente não é esse o caso.
O que o código do WordPress faz com as lesmas de tema / plugin?
O código principal do WordPress não depende de lesmas de tema / plug-in para executar tarefas como instalar, ativar, atualizar, excluir temas ou plug-ins.
Para temas, ele se baseia no diretório de temas, já que o principal ponto de entrada de um tema é o style.css
arquivo (você não pode usar outro arquivo CSS para manter o cabeçalho de detalhes do tema).
Para plugins, ele se baseia no diretório do plug - in E no arquivo principal do plug-in , já que os plug-ins podem chamar seu arquivo principal como quiserem.
A única coisa para a qual o núcleo usa slugs de tema / plug-in é quando ele lida com temas e plug-ins do diretório WordPress.org: buscando listas de plug-ins, verificando atualizações, relatando os dados de uso do diretório e assim por diante.
Para encerrar as coisas sobre as lesmas do plug-in: sempre que você encontrar dados do plug-in com a slug
entrada, 99% do tempo se referirá à lesma WordPress.org do plug-in.
Como identificamos plugins?
Se você deseja ativar, atualizar, desativar ou excluir programaticamente um determinado plug-in em uma instalação do WordPress, use o arquivo do plug-in. Você pode obtê-lo assim no arquivo principal do seu plugin:
$plugin_file = plugin_basename( __FILE__ );
Se você deseja segmentar um determinado plug-in a partir de outro, as coisas ficam um pouco mais complicadas, pois você precisa contar com um pouco de "adivinhação".
Você pode codificar o nome do plug-in, pesquisar o plug-in na lista de todos os plug-ins (consulte get_plugins () ) e obter o arquivo do plug-in a partir daí.
Se você conhece uma classe ou função definida por esse plug-in, pode usar a reflexão (consulte esta resposta para classes e esta para funções).
Espero que isso ajude você e outras pessoas que possam ter dificuldade em lidar com "lesmas de plug-ins". Poderia ter me poupado algumas horas :)