O que devo usar em vez de WP_CONTENT_DIR e WP_PLUGIN_DIR?

15

A documentação do WordPress para Determinação de diretórios de plug-in e conteúdo afirma que:

O WordPress utiliza as seguintes constantes ao determinar o caminho para os diretórios de conteúdo e plug-in. Eles não devem ser usados ​​diretamente por plugins ou temas , mas estão listados aqui para garantir a integridade.

Ele continua listando WP_CONTENT_DIRe WP_PLUGIN_DIRentre constantes que os desenvolvedores de temas e plug-ins não devem usar, provavelmente por causa disso:

O WordPress permite que os usuários coloquem seu diretório wp-content em qualquer lugar que desejarem, portanto, você nunca deve assumir que os plug-ins estarão em wp-content / plugins, ou que os uploads estarão em wp-content / uploads ou que os temas estarão em wp- conteúdo / temas.

Mark Jaquith também comenta aqui que essas constantes não devem ser usadas:

Não use WP_PLUGIN_URL ou WP_PLUGIN_DIR - os plug-ins podem não estar no diretório de plug-ins.

Então, qual é a maneira aceita de referenciar o caminho completo para as pastas de plug-ins, conteúdo wp e temas sem usar essas constantes?

Como um exemplo simples, para gerar o caminho completo de todos os plugins instalados, eu posso fazer isso:

<?php
$plugins = get_plugins();

foreach ($plugins as $file => $details) {
    echo WP_PLUGIN_DIR . '/' . $file . '<br>';
}

O que produz uma lista como esta:

/var/www/wp-content/plugins/akismet/akismet.php
/var/www/wp-content/plugins/debug-bar/debug-bar.php
/var/www/wp-content/plugins/hello.php

(Talvez eu queira fazer isso se estiver escrevendo um plug-in para permitir que o usuário arquive seletivamente plug-ins como parte de um backup do site, por exemplo.)

Se o uso WP_PLUGIN_DIRestiver errado, qual é a alternativa sugerida? Não há equivalente wp_upload_dir()para a pasta de plug-ins, temas e conteúdo wp que posso encontrar, o que torna problemática a referência a temas potencialmente errantes e diretórios raiz de plug-ins.

usuario
fonte
Dê uma olhada no artigo do Codex Determinando plug-ins e diretórios de conteúdo .
Charles Clarkson
2
@CharlesClarkson Refiro essa página na primeira frase da minha pergunta. Ele diz para não usar as constantes acima, mas não sugere uma alternativa para coisas como WP_PLUGIN_DIR, portanto, minha pergunta aqui.
101613 Nick

Respostas:

17

Arquivo de referência no caminho atual ou aninhado mais profundo

Para referenciar o caminho atual

plugin_dir_path( __FILE__ )."further/nesting/here.css";

que funciona em plugins e temas .

Referência URl / URi em um plugin

Para apontar para um plugin ou arquivo de tema, use

plugins_url( "path/to/file", __FILE__ );

que funciona apenas em plugins

Referência URl / URi na wp-adminpasta

Sempre aponte para eles admin_url( 'some/path' );. Existe get_admin_url()também.

Referência URl / Uri na wp-includespasta

Aponte-os para includes_url( 'some/path' );

Um URl / URi em relação à página inicial dos sites

Existe home_url( 'etc' );ou get_home_url()para isso. Semelhante é get_site_url()e site_url(). Então também há network_home_url(). E você conseguiunetwork_admin_url()

wp-content ou o diretório renomeado

Você pode redefinir o wp-contentnome da pasta. Portanto você usa content_url()lá.

Como obter o URL da pasta de plugins?

Se o uso de WP_PLUGIN_DIR estiver errado, qual é a alternativa sugerida?

Simplesmente use plugins_url()sem nenhum parâmetro.

Se você usá-lo para um plug-in, ele também funciona para plug-ins de MU.

EDIT # 1 Se você estiver interessado no caminho para o plugin atual, use plugin_basename();.

EDIT # 2 Se você estiver interessado em todos os plugins ativos laterais, use wp_get_active_network_plugins();.

Se você não estiver em vários sites, vá com wp_get_active_and_valid_plugins();. Isso levará em consideração vários locais / rede. Lembre-se de que isso os levará em consideração se você não estiver em vários sites, mas tiver uma sunrise.phpqueda.

Você também pode recuperá-los via get_option( 'active_plugins' );, o que não é recomendado , pois não leva em consideração a validação de filtros e plug-ins, o que acontece em várias ocasiões.


Leitura adicional

Esta lista continua e continua. Dê uma olhada nos resultados da pesquisa em QueryPosts.com para obter mais informações.

Este artigo vai em profundidade absoluta sobre todos os caminhos.

kaiser
fonte
3
Obrigado por isso, mas sua resposta parece lidar com URLs, e não com caminhos absolutos do servidor, que é o que eu estava interessado. Por exemplo, plugins_url()retorna o URL para a pasta plug-ins, não o caminho completo para o diretório no servidor. Existem funções semelhantes para lidar com diretórios que eu não conheço? Ou o conselho para não usar a WP_PLUGIN_DIRconstante é simplesmente errado?
101613 Nick
(Estou especificamente interessado em encontrar o caminho completo para os plug-ins instalados, que não sejam o plug-in que contém meu próprio código, caso isso ajude a explicar.) #
Nick
@ Nick Ver atualização.
Kaiser #
O artigo "detalha todos os plugins" não está mais disponível. E ainda não consigo entender como obter o caminho absoluto para o diretório de plugins sem usar WP_PLUGIN_DIR.
precisa saber é o seguinte
4
  1. Isso retorna o caminho do servidor do diretório do plug-in atual:

    plugin_dir_path(__FILE__)
    
    // example: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/

    Ref: https://codex.wordpress.org/Function_Reference/plugin_dir_path

    Não deve ser confundido com:

    plugins_dir_path(__FILE__)

    (Observe o plural "plugin s " sobre isso).

  2. Como você não deseja que o nome do diretório do plugin seja retornado, precisamos removê-lo. Aqui está uma função que retorna o diretório do plugin e o nome do arquivo:

    plugin_basename(__FILE__)
    
    // example: exampleplugin/exampleplugin.php
  3. Mas é claro que também não queremos o nome do arquivo do plug-in, portanto, precisamos removê-lo plugin_basename(__FILE__)primeiro. Para retornar o nome do arquivo do plug-in:

    basename(__FILE__)
    
    // example: exampleplugin.php
  4. Então, para usá-los para construir um caminho para o diretório de plugins , podemos usar a str_replace()função algo como isto:

    $myBnm = basename(__FILE__); // value: exampleplugin.php
    $myDir = plugin_basename(__FILE__); // value: exampleplugin/exampleplugin.php
    $myStr = str_replace($myBnm,"",$myDir); // value: exampleplugin/
    $myPth = plugin_dir_path(__FILE__); // value: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
  5. E, se necessário, é claro que essa linha final pode ser atribuída a uma variável, para uso repetido.

    Ao invés de:

    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/

    Use algo como:

    $thePlgDir = str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/

    E mais tarde, quando necessário:

    return $thePlgDir;
Joe Rhoney
fonte