Eklentilerin bilgisini nasıl bulabilirim?


11

Eklentilerin slug (WordPress tarafından eklenti güncellemeleri yapmak ve şu anda aktif olan eklentileri belirlemek için kullanılan dahili ad) nasıl bulabilirim merak ediyorum? Genellikle eklentinin klasör adıdır ancak eklentinin bir klasörü yoksa dosya adıdır (hello.php gibi). Başka istisnalar var mı?

  1. Küçük ve büyük karakterler önemli mi?
  2. Bir eklentinin klasör adından farklı bir bilgi kaynağı olabilir mi? Hello.php ve başka bir /hello.php/hello.php adlı bir eklenti varsa ne olur?

Çok iyi bir soru, yazık ki
Q'lara

Yanıtlar:


8

Eklentiyi tanımlamak için WordPress'te kullanılan dize:

plugin_basename($file);

Eklenti başlıklarına sahip$file bir dosya .

Eğer eklentinizdeyseniz, slug'ı alın:

$slug = plugin_basename( __FILE__ );

1
plugin_basename ($ dosya); 3.8.1'den beri sülük değil. Bu, / plugin_main_file.php klasörüdür. Eklenti "sülük" olarak Akismet "akismet / akismet.php" değil "akismet" dir.
Jeff Mattson

3
bu her iki durumda da artık doğru cevap değildir.
majick

@majick true, Wordpress 4.7.4 için cevap değil
Marecky

2
Eklenti slug oluşturmanın başka bir yolu kullanmaktır dirname(plugin_basename(__FILE__)).
ilanco

2

WP-CLI yüklerseniz , eklentilerin listesini slug ve sürümüyle komut satırından alabilirsiniz:

> wp plugin list

Slug kodunu bulmanız gerekiyorsa, muhtemelen istediğiniz şey olmadığını biliyorum, ancak TGM-Plugin-Activation eklentisi ile çalışırken bana yardımcı oldu.

WP-CLI olmadan WordPress ile çalışmayı zor buluyorum, genel olarak WordPress ile ilgili birçok genel görev için çok yararlı bir araç.


2

Eklenti (ana) dosyası ile eklentinin bilgi dosyası arasındaki fark, WordPress Codex'un çok daha iyi yapabileceği bir yerdir. Karışıklıklarını çok yakın zamanda hissettiğim için anlıyorum (hayal kırıklığı ile karışık).

WordPress çekirdek kodunda bazı "dedektiflik çalışmaları" yaparak öğrendiğim budur.

Eklenti dosyası

Bu, WordPress'in bir eklentiyi tanımlaması ve kaydetmesi için benzersiz bir yoldur. Eklentinin dizininden ve ana eklenti dosyasından (sürüm, yazar vb. Gibi çeşitli eklenti ayrıntılarını içeren dosya başlığına sahip olan) oluşur.

Bunun gibi bir şey olurdu: your-plugin-directory/main-file.php

Etkin eklenti verilerine bakarsanız (tarafından döndürülür get_option( 'active_plugins' )), WordPress'in eklentileri düzgün bir şekilde tanımlamak için bu eklenti dosyasına ihtiyacı olduğunu görürsünüz.

Bunu, eklentinizin ana dosya göreli yolu (olan wp-content/plugins/dizine göre) olarak düşünmeyi seçebilirsiniz . Ana eklenti dosyasının mutlak yolunu aşağıdaki gibi bir şeyle "oluşturabilirsiniz":trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file

Çekirdeğin kendisi eklenti dosyasını şu şekilde üretir:

$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );

Eklenti bilgi

Bir eklenti "slug" post slug yazı için olduğu gibi eklenti için bir çeşit standart kimlik olmasını beklediğiniz - böylece WordPress çekirdek işlevlerini sağlamak ve işler almak için bu "slug" kullanabilirsiniz.

Pek sayılmaz. Eklenti salyangozlara (veya önemli olan konulara) başvurular için çekirdeği araştırdıktan ve neredeyse hiçbir şey bulamadığımda, üzerinde bir kavrayışım olduğunu düşünüyorum.

Tek gerçek sümüklü böcekler , benzersiz bir URL yoluyla erişilebilen şeyler içindir: gönderiler, sayfalar, sınıflandırmalar, vb. Bu, bir şeyin adını (bir yazı başlığı gibi) almanın ve URL dostu bir versiyonunun oluşturulmasının bütün noktasıdır: kullanmak bir URL'de.

Ancak URL'lerde theme / plugins "slugs" i nerede kullanıyoruz?

Bunu, WordPress kurulumlarında yapmıyoruz - WP yöneticisinde veya ön uçta.

Ancak, WordPress kodu, WordPress.org sitesi ile çok fazla karışmış bir yer var . İnsanlar, WordPress.org temasının veya eklenti salyangozların bir gönderi veya sayfa sümüküyle aynı şekilde çalışması gerektiğini düşünmek için geliştiriciler arasında bir şekilde yaygın hale gelmesi de dahil olmak üzere ikisi arasında ayrım yapmakta zorlanıyorlar .

Aynı amaca hizmet ederler ancak ayrı web sitelerinde. WordPress.org'da, başkalarından bir temayı ve geri kalanından bir eklentiyi (gibi URL'lerde https://wordpress.org/plugins/akismet/) benzersiz bir şekilde tanımlamak için kullanılırlar .

Ancak bireysel WordPress kurulumları söz konusu olduğunda , aynı benzersizlik garanti edilemez çünkü onu uygulama yetkisi yoktur (WordPress.org'daki gibi). Tüm eklentiler ve temalar WordPress.org'dan geldiyse işe yarayabilir , ancak neyse ki durum böyle değildir.

WordPress kodu tema / eklenti sümüklü böceklerle ne yapar?

WordPress çekirdek kodu , temaları veya eklentileri yüklemek, etkinleştirmek, güncellemek, temaları veya eklentileri silmek gibi şeyler yapmak için tema / eklenti sümüklerine güvenmez .

Temalar için temanın ana giriş noktası style.cssdosya olduğundan (tema ayrıntıları başlığınızı tutmak için başka bir CSS dosyası kullanamazsınız) tema dizinine dayanır .

Eklentiler için, eklenti ana dosyasını istedikleri gibi çağırabildiği için eklenti dizinine ve ana eklenti dosyasına dayanır .

Çekirdeğin tema / eklentiler için salyangozları kullandığı tek şey, WordPress.org dizinindeki temaları ve eklentileri işlemesi : eklenti listelerinin getirilmesi, güncellemelerin kontrol edilmesi, dizin kullanım verilerine geri bildirilmesi vb.


Eklenti sümüklü böcekler hakkında bir şeyler sarmak için :slug girişle birlikte eklenti verileri bulduğunuzda ,% 99'u eklentinin WordPress.org slug'ına atıfta bulunacaktır .

Eklentileri nasıl belirleyebiliriz?

WordPress kurulumunda belirli bir eklentiyi programlı olarak etkinleştirmek, güncellemek, devre dışı bırakmak veya silmek istiyorsanız , eklenti dosyasını kullanmanız gerekir . Sen bunun gibi alabilirsiniz senin eklentinin ana dosya:

$plugin_file = plugin_basename( __FILE__ );

Başka bir eklentiden belirli bir eklentiyi hedeflemek istiyorsanız , bir miktar "tahmin" e güvenmeniz gerektiğinden işler biraz daha karmaşıklaşır.

Eklenti adını sabit kodlayabilir, tüm eklentiler listesinde eklentiyi arayabilir (bkz. Get_plugins () ) ve eklenti dosyasını oradan alabilirsiniz.

Eğer yansıma kullanabilirsiniz eklentisi ile belirlenir ve böylece bir sınıf veya işlevi biliyorsanız (bkz bu sınıflar için cevap ve bu bir işlevleri için).


Umarım bu size ve "eklenti salyangoz" ile uğraşmakta zorlanabilecek diğerlerine yardımcı olur. Bana birkaç saat kurtarabilirdi :)


0

Sadece orjinal gönderiden beri açıklığa kavuşturmak için.

Eklenti slug'ı bulduğum yol, önce eklenti klasörünüze gidip eklentiyle ilişkili klasörü açarak ve son olarak aşağıdaki kodu içeren dosyayı bularak. Bu dosyayı bulduktan sonra, dosya adı eklentisi eklentinin eklentiniz olmalıdır.

Örneğin, i aşağıdaki kodu advanced-plugin-awesomeness.php adlı bir dosyada bulursa, slug'm gelişmiş plugin-awesomeness olur.

Bu yardımcı olur umarım!

/*
Plugin Name: Name of plugin here
Version: 2.4.6
Description: plugin description here
Author: plugin author here

-1 çoğu dosya adı ve dizin
eşleşirken

hatta dizini değil! güncellenmiş cevabımı gör, aslında Eklenti Adı'ndan geliyor.
majick

0

Maalesef slug Güncelleme API'sı aracılığıyla döndürülür, API'nın kendisini sorgulamadığınız sürece bu sorunun cevabı çok açık değildir. Ancak, mevcut eklenti salyangozlarınızın ve ilgili eklenti verilerinizin bir listesini görmek istiyorsanız şunları yapabilirsiniz:

print_r(get_site_transient('update_plugins'));

Ancak, bu yeni yüklenen bir eklenti hakkında 12 saat daha bilgi sahibi olmayacak, bunlar için farklı bir şey yapmanız gerekecek, örneğin. kod değiştirilmiş bir sürümünü wp_update_pluginsde wp-includes/update.php...

Bunu test etmek için yaptıktan sonra, eklenti dosya adı veya konumu veya büyük harfine bakılmaksızın, aslında Plugin Namegüncelleme sümüğünü oluşturanın, büyük olasılıkla üzerinden olduğunu onaylıyor gibi görünüyor sanitize_title. Bu yüzden doğru cevabın olması gerektiğine inanıyorum:

// if you have the plugin basename:
// $pluginfile = WP_PLUGIN_DIR.'/'.$pluginbasename;

// otherwise if you have the absolute path already:
$plugin = get_plugin_data($pluginfile);
$pluginslug = sanitize_title($plugin['Name']);

+1 ve ek bir not, wordpress.org ekibi tarafından, slug hesaplama yönteminin henüz kesin olmadığı kesinleştiği için
zamanla da değişebileceğidir

Bunun doğru olduğundan emin değilim, bir eklenti için yapmaya çalışıyordum ama bu başarısız oluyor: Döndürülen eklenti adı "Duyarlı WordPress Slider - Soliloquy Lite" ve sülük: soliloquy-lite
Chris

Bunun nedeni, eklentinin depoya gönderildiği anda oluşturulduğundan ve daha sonra adla değişmediğinden şüpheleniyorum ... çoğu durumda dizin adıyla eşleşir, ancak her ikisi için de istisnalar varsa, biri ya da diğeri olmak. ideal değil: - /
majick

0

Sen ileterek eklentinin klasör adı (PHP5.3 +) alabilirsiniz DIR şöyle,) (plugin_basename için:

$plugin_foldername = plugin_basename( __DIR__ );

0

Bunu dene:

function get_slugname(){
    $tmp = array();
    $plugins_all = get_plugins() ;
    $plugin_slug = explode('/',dirname(plugin_basename(__FILE__)));
    foreach ($plugins_all as $key=>$value) {
        if ($plugin_slug[0] == explode('/',$key)[0] ) {
        $tmp = $value;
        $tmp['slug'] = explode('/',$key)[0];
        $tmp['file'] = explode('/',$key)[1];
        }
    }
return $tmp;
}

1
Lütfen yanıtınızı düzenleyin ve bu kodun ne yaptığına dair bir açıklama ekleyin.
Nathan Johnson

0

Çoğu eklenti için, "slug" dizin adıyla aynı olacaktır. Rağmen .org insanlar dizin adını istedikleri herhangi bir şey için ayarlayabilirsiniz.

$slug = (dirname(plugin_basename(__FILE__)));
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.