Come posso trovare la lumaca dei plugin?


11

Mi chiedo come posso trovare la lumaca dei plugin (lumaca = nome interno usato da WordPress per fare aggiornamenti dei plugin e determinare quali plugin sono attualmente attivi)? Di solito è il nome della cartella del plugin ma se un plugin non ha una cartella, è il nome del suo file (come ciao.php). Ci sono altre eccezioni?

  1. I caratteri minuscoli e maiuscoli contano?
  2. Un plugin può avere una lumaca diversa dal nome della sua cartella? E se ci fosse un plugin chiamato hello.php e un altro /hello.php/hello.php?

Ottima domanda, peccato che non possiamo assegnare taglie a Q's, ma immagino che A sia il premio;)
brasofilo,

Risposte:


8

La stringa utilizzata in WordPress per identificare il plugin è:

plugin_basename($file);

... dov'è $fileun file con le intestazioni del plugin .

Quindi se sei nel tuo plugin, prendi la lumaca con:

$slug = plugin_basename( __FILE__ );

1
plugin_basename ($ file); Non è la lumaca dal 3.8.1. Questo è il percorso cartella / plugin_main_file.php. Poiché lo "slug" del plugin Akismet non è "akismet / akismet.php" ma è "akismet".
Jeff Mattson,

3
questa non è più la risposta corretta in entrambi i casi.
maestà

@majick true, per Wordpress 4.7.4 non è la risposta
Marecky

2
Un altro modo per generare la lumaca del plugin è usando dirname(plugin_basename(__FILE__)).
ilanco,

2

Se installi WP-CLI puoi ottenere l'elenco dei plugin con il loro slug e versione dalla riga di comando:

> wp plugin list

So che probabilmente non è quello che vuoi, se devi trovare la lumaca nel codice, ma mi ha aiutato mentre lavoravo con il plugin TGM-Plugin-Activation.

Trovo difficile lavorare con WordPress senza WP-CLI, in generale è uno strumento molto utile per molte attività comuni relative a WordPress.


2

La differenza tra il file del plugin (principale) e la lumaca del plugin è un luogo in cui il WordPress Codex potrebbe fare molto meglio. Capisco la tua confusione come l'ho provata troppo di recente (mista a frustrazione).

Questo è quello che ho imparato facendo un po 'di "lavoro investigativo" sul codice centrale di WordPress.

Il file del plugin

Questo è il modo unico in cui WordPress identifica e registra un plugin. È composto dalla directory del plug-in E dal file del plug-in principale (quello con l'intestazione del file contenente i vari dettagli del plug-in come versione, autore, ecc.).

Sarebbe simile a questo: your-plugin-directory/main-file.php

Se guardi i dati dei plugin attivi (restituiti da get_option( 'active_plugins' )), vedrai che WordPress ha bisogno solo di questo file di plugin per identificare correttamente i plugin.

Potresti scegliere di pensarlo come il percorso relativo del file principale del tuo plugin (relativamente alla wp-content/plugins/directory che è). Potresti "comporre" il percorso assoluto del file del plugin principale con qualcosa del genere:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file

Il core stesso genera il file plugin in questo modo:

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

La lumaca del plugin

Ci si aspetterebbe che il plug-in "slug" sia una sorta di ID standardizzato per il plug-in come il post slug è per i post - quindi potresti usare questo "slug" per fornirlo alle funzioni principali di WordPress e far funzionare le cose.

Non proprio. Dopo aver cercato nel nucleo riferimenti a slug plug-in (o temi per ciò che conta) e non ho trovato quasi nulla, penso di averne una comprensione.

Le uniche vere e proprie lumache sono quelle per le cose accessibili tramite un unico URL: post, pagine, tassonomie, ecc. Questo è il punto centrale di prendere il nome di qualcosa (come un titolo di post) e generare una versione di URL facile da usare : usare in un URL.

Ma dove utilizziamo "lumache" di temi / plugin negli URL?

Non lo facciamo su singole installazioni di WordPress, né nell'amministratore del WP né nel frontend.

Tuttavia, c'è un posto molto impigliato con il codice WordPress, il sito WordPress.org. Le persone fanno fatica a distinguere tra i due, incluso che è diventato in qualche modo comune tra gli sviluppatori considerare il tema WordPress.org o le lumache dei plugin dovrebbero funzionare allo stesso modo di una lumaca post o pagina.

Servono allo stesso scopo ma su siti Web separati . Su WordPress.org vengono utilizzati per identificare in modo univoco un tema dagli altri e un plug-in dal resto (in URL come https://wordpress.org/plugins/akismet/).

Ma quando si tratta di singole installazioni di WordPress, la stessa unicità non può essere garantita perché non esiste l'autorità per applicarla (come su WordPress.org). Potrebbe funzionare se tutti i plugin e i temi provenissero da WordPress.org, ma per fortuna non è così.

Cosa fa il codice WordPress con le slug a tema / plugin?

Il codice principale di WordPress non si basa su slug a tema / plugin per fare cose come l'installazione, l'attivazione, l'aggiornamento, l'eliminazione di temi o plugin.

Per i temi, si basa sulla directory dei temi poiché il punto di ingresso principale in un tema è il style.cssfile (non è possibile utilizzare un altro file CSS per contenere l'intestazione dei dettagli del tema).

Per i plug-in, si basa sulla directory dei plug-in E sul file dei plug-in principale , poiché i plug-in possono chiamare il loro file principale come preferiscono.

L'unica cosa per cui il core usa le lumache tema / plugin è quando gestisce temi e plugin dalla directory di WordPress.org: recuperare elenchi di plugin, controllare gli aggiornamenti, riferire ai dati di utilizzo della directory e così via.


Per concludere le cose sugli slug dei plug-in: ogni volta che trovi i dati dei plug-in con la slugvoce, il 99% delle volte farà riferimento allo slug di WordPress.org del plug-in.

Come possiamo identificare i plugin?

Se si desidera attivare, aggiornare, disattivare o eliminare a livello di codice un determinato plug-in su un'installazione di WordPress, è necessario utilizzare il file del plug-in. Puoi ottenerlo in questo modo dal file principale del tuo plugin:

$plugin_file = plugin_basename( __FILE__ );

Se vuoi scegliere come target un determinato plugin da un altro plugin, le cose diventano un po 'più complicate poiché devi fare affidamento su un po' di "congetture".

È possibile codificare il nome del plug-in, cercare il plug-in nell'elenco di tutti i plug-in (consultare get_plugins () ) e ottenere il file del plug-in da lì.

Se conosci una classe o una funzione definita da quel plugin puoi usare la riflessione (vedi questa risposta per le classi e questa per le funzioni).


Spero che questo aiuti te e gli altri che potrebbero avere difficoltà a gestire le "lumache dei plug-in". Mi avrebbe risparmiato un paio d'ore :)


0

Giusto per chiarire dal post originale.

Il modo in cui ho trovato il plug-in del plug-in è prima accedendo alla cartella del plug-in, quindi aprendo la cartella associata al plug-in e infine trovando il file che contiene il codice seguente. Una volta trovato questo file, il nome del file meno l'estensione dovrebbe essere la lumaca del plugin.

Per esempio se trovassi il codice qui sotto in un file chiamato advanced-plugin-awesomeness.php il mio slug sarebbe advanced-plugin-awesomeness.

Spero che questo ti aiuti!

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

-1 come mentre la maggior parte dei nomi di file e directory corrisponde, questo non è un metodo affidabile poiché lo slug di aggiornamento è in realtà la directory - non il nome del file (a meno che non ci sia directory.)
Majick

o nemmeno la directory! vedi la mia risposta aggiornata, in realtà proviene dal nome del plugin.
maestà

0

Sfortunatamente la lumaca viene restituita tramite l'API di aggiornamento, la risposta a questa domanda non è così ovvia se non si esegue una query sull'API stessa. Tuttavia, se si desidera visualizzare un elenco delle slug del plug-in corrente e dei relativi dati del plug-in, è possibile fare semplicemente:

print_r(get_site_transient('update_plugins'));

Ma questo non avrà informazioni su un plugin appena installato per altre 12 ore, dovresti fare qualcosa di diverso per quelli, ad es. usa una versione modificata del codice da wp_update_pluginsin wp-includes/update.php...

Avendolo fatto per provarlo, sembra confermare che, indipendentemente dal nome del file del plugin o dalla posizione o maiuscola, è in realtà quello Plugin Nameche genera lo slug di aggiornamento, molto probabilmente tramite sanitize_title. Quindi credo che la risposta corretta dovrebbe essere:

// 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 e una nota aggiuntiva è che questo potrebbe cambiare con il tempo, così come è stato reso esplicito dal team di wordpress.org che la metodologia di calcolo degli slug non è ancora del tutto definitiva
Mark Kaplun,

Non sono sicuro che sia accurato, stavo tentando di farlo per un plug-in ma questo non riesce: il nome del plug-in restituito è "Responsive WordPress Slider - Soliloquy Lite" e lo slug è: soliloquy-lite
Chris

Sospetto che ciò sia dovuto al fatto che la lumaca viene generata nel momento in cui il plug-in viene inviato al repository e non cambia con il nome in seguito ... nella maggior parte dei casi corrisponde al nome della directory, ma se ci sono eccezioni ad entrambi, potrebbe essere l'uno o l'altro. non è l'ideale: - /
majick il

0

Puoi ottenere il nome della cartella del plugin (PHP5.3 +) passando DIR a plugin_basename (), in questo modo:

$plugin_foldername = plugin_basename( __DIR__ );

0

Prova questo:

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
Si prega di modificare la tua risposta e aggiungere una spiegazione di ciò che questo codice fa.
Nathan Johnson,

0

Per la maggior parte dei plugin, lo "slug" sarà lo stesso del nome della directory. Anche se le persone .org possono impostare il nome della directory su tutto ciò che vogliono.

$slug = (dirname(plugin_basename(__FILE__)));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.