WP_CONTENT_DIR ve WP_PLUGIN_DIR yerine ne kullanmalıyım?


15

Eklenti ve İçerik Dizinlerinin Belirlenmesi için WordPress belgeleri şunları belirtir:

WordPress, içerik ve eklenti dizinlerinin yolunu belirlerken aşağıdaki sabitleri kullanır. Bunlar doğrudan eklentiler veya temalar tarafından kullanılmamalıdır , ancak tamlık için burada listelenmiştir.

Tema ve eklenti geliştiricilerinin muhtemelen bu nedenle kullanmaması gereken sabitleri listeliyor WP_CONTENT_DIRve devam ediyor WP_PLUGIN_DIR:

WordPress, kullanıcıların wp-içerik dizinlerini istedikleri yere yerleştirmelerine izin verir, bu nedenle eklentilerin wp-içerik / eklentilerde olacağını veya yüklemelerin wp-içerik / yüklemelerde olacağını veya temaların wp- content / temalar.

Mark Jaquith de burada bu sabitlerin kullanılmaması gerektiğini söylüyor:

WP_PLUGIN_URL veya WP_PLUGIN_DIR kullanmayın - eklentiler eklenti dizininde olmayabilir.

Peki, bu sabitleri kullanmadan eklentilere, wp içeriğine ve tema klasörlerine giden tam yolu göndermenin kabul edilen yolu nedir?

Basit bir örnek olarak, yüklü tüm eklentilerin tam yolunu çıkarmak için bunu yapabilirim:

<?php
$plugins = get_plugins();

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

Hangi böyle bir liste üretir:

/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

(Kullanıcının örneğin site yedeklemesinin bir parçası olarak eklentileri seçerek arşivlemesine izin vermek için bir eklenti yazıyordum bunu yapmak isteyebilirsiniz.)

Kullanmak WP_PLUGIN_DIRyanlışsa önerilen alternatif nedir? wp_upload_dir()Ekleyebileceğim eklentiler, temalar ve wp-içerik klasörü için eşdeğer yoktur , bu da potansiyel gezici temalara ve eklenti kök dizinlerine başvurmayı sorunlu hale getirir.



2
@CharlesClarkson Sorumun ilk cümlesinde bu sayfaya atıfta bulunuyorum. Yukarıdaki sabitleri kullanmadığı söylenir, ancak WP_PLUGIN_DIRburadaki soruma bir alternatif önermez .
Nick

Yanıtlar:


17

Geçerli yoldaki veya daha derin iç içe başvuru dosyası

Geçerli yola başvurmak için

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

Eklentiler ve Temalar'da çalışır .

Bir eklentide referans URl / URi

Bir eklentiyi veya tema dosyasını işaret etmek için şunu kullanın:

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

sadece eklentilerde çalışan

Referans URL / URI wp-adminklasörüne

Daima işaret edin admin_url( 'some/path' );. Orada da var get_admin_url().

wp-includesKlasördeki URl / Uri referansı

Onları includes_url( 'some/path' );

Ana sitelere göre bir URl / URi

Var home_url( 'etc' );ya da bunun get_home_url()için. Benzer get_site_url()ve site_url(). Sonra da var network_home_url(). Ve sende varnetwork_admin_url()

wp-content veya yeniden adlandırılan dizin

wp-contentKlasör adını yeniden tanımlayabilirsiniz . Bu content_url()yüzden orada kullanıyorsunuz.

Eklentiler klasörü URL'si nasıl alınır?

WP_PLUGIN_DIR kullanmak yanlışsa, önerilen alternatif nedir?

plugins_url()Herhangi bir parametre olmadan kullanın .

Bir eklenti için kullanırsanız, MU eklentileri için de çalışır.

EDIT # 1 Mevcut eklentinin yoluyla ilgileniyorsanız, kullanın plugin_basename();.

2. DÜZENLEME Yandaki tüm etkin eklentilerle ilgileniyorsanız, kullanın wp_get_active_network_plugins();.

Çoklu sitede değilseniz, ile devam edin wp_get_active_and_valid_plugins();. Bu çoklu siteyi / ağı dikkate alacaktır. Çok siteli değilseniz, ancak bir sunrise.phpdüşüş yaşarsanız, bunların bunları dikkate alacağını unutmayın .

Sen olabilir aracılığıyla onları da almak get_option( 'active_plugins' );hangi, tavsiye edilmez o defalarca olur bir hesaba filtreleri ve eklentisi doğrulama almaz olarak.


daha fazla okuma

Bu liste uzayıp gidiyor. Daha fazla bilgi için QueryPosts.com'daki arama sonuçlarına göz atın .

Bu makale , tüm yollar hakkında mutlak bir derinliğe sahiptir .


3
Bunun için teşekkürler, ancak cevabınız, ilgilendiğim şey olan mutlak sunucu yolları yerine URL'lerle ilgileniyor gibi görünüyor. Örneğin plugins_url(), URL'yi sunucudaki dizinin tam yolunu değil, plugins klasörüne döndürür. Farkında olmadığım dizinleri işlemek için benzer işlevler var mı? Yoksa WP_PLUGIN_DIRsabiti kullanmama tavsiyesi basitçe yanlış mı?
Nick

(Özellikle açıklamaya yardımcı olması durumunda kendi kodumu içeren eklenti dışında yüklü eklentilerin tam yolunu bulmakla ilgileniyorum.)
Nick

@ Güncellemeye bakın seçeneğine tıklayın.
kaiser

"Tüm eklentiler hakkında derinlemesine bilgi" makalesi artık mevcut değil. Ve hala kullanmadan plugins dizinine mutlak yol almak için nasıl anlayamıyorum WP_PLUGIN_DIR.
XedinBilinmeyen

4
  1. Bu, geçerli eklentinin dizinin sunucu yolunu döndürür:

    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

    Şununla karıştırılmamalıdır:

    plugins_dir_path(__FILE__)

    (Bildirim çoğul "eklentisi lar bu konuda".)

  2. Eklenti dizini adının döndürülmesini istemediğiniz için bunu kaldırmamız gerekir. Eklenti dizinini ve dosya adını döndüren bir işlev şunlardır:

    plugin_basename(__FILE__)
    
    // example: exampleplugin/exampleplugin.php
  3. Ancak elbette eklentinin dosya adını da istemiyoruz, bu yüzden plugin_basename(__FILE__)ilk önce bunu çıkarmamız gerekecek . Eklentinin dosya adını döndürmek için:

    basename(__FILE__)
    
    // example: exampleplugin.php
  4. Bu nedenle, plugins dizinine bir yol oluşturmak için bunları kullanmak için, str_replace()işlevi şu şekilde kullanabiliriz :

    $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. Ve gerekirse, bu son hat, tekrar kullanım için elbette bir değişkene atanabilir.

    Onun yerine:

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

    Şunun gibi bir şey kullanın:

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

    Ve daha sonra, gerektiğinde:

    return $thePlgDir;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.