Come Aggiungere il Link "Visualizza Dettagli" nella Pagina Admin dei Plugin
Come faccio a far apparire il link [Visualizza dettagli] nella pagina di amministrazione dei plugin nell'area della descrizione?
Il plugin funziona correttamente, la versione e gli autori (con relativi link) vengono visualizzati, ma manca il link [Visualizza dettagli] presente nella maggior parte degli altri plugin.
Forse sto ponendo la domanda sbagliata, ma sto lavorando a un plugin e vorrei mostrare il contenuto di readme.txt e gli screenshot come vedo in molti altri plugin. Come posso far apparire questo link e mostrare il contenuto del file readme.txt?
Ho letto Professional WordPress Plugin Development, ma non riesco a trovare questo riferimento. Potrei puntare a un URI esterno, ma preferirei avere il pannello pulito e conciso che vedo sugli altri plugin.

Il link "Visualizza dettagli" nella tabella dell'elenco dei plugin installati viene mostrato solo per i plugin ospitati nel repository di plugin di WordPress.org. Se dai un'occhiata al codice sorgente di WP_Plugins_List_Table->single_row()
, vedrai che il link dei dettagli viene generato solo se sono presenti dati dall'API, ad esempio se lo slug è impostato:
// Link dettagli usando le informazioni dell'API, se disponibili
if ( isset( $plugin_data['slug'] ) && current_user_can( 'install_plugins' ) ) {
$plugin_meta[] = sprintf( '<a href="%s" class="thickbox" aria-label="%s" data-title="%s">%s</a>',
esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $plugin_data['slug'] .
'&TB_iframe=true&width=600&height=550' ) ),
esc_attr( sprintf( __( 'Ulteriori informazioni su %s' ), $plugin_name ) ),
esc_attr( $plugin_name ),
__( 'Visualizza dettagli' )
);
} elseif ( ! empty( $plugin_data['PluginURI'] ) ) {
$plugin_meta[] = sprintf( '<a href="%s">%s</a>',
esc_url( $plugin_data['PluginURI'] ),
__( 'Visita il sito del plugin' )
);
}

Non hai specificato se il tuo plugin è/non è ospitato su WordPress.org, né se hai installato il plugin dalla Directory dei Plugin di WordPress o solo una copia ZIP locale (che equivale a un plugin ospitato privatamente).
Come già risposto in precedenza, il link "Visualizza dettagli" appare solo per i plugin che hanno lo slug ospitato su WordPress.org.
Voglio solo sottolineare che ci sono situazioni in cui potresti non vedere "Visualizza dettagli" anche per un plugin che in realtà è ospitato da WordPress.org.
Come? In quale situazione?
Esempio: immagina che il tuo plugin sia ospitato da loro ma in realtà non l'hai installato dalla Directory dei Plugin di WordPress, invece hai installato un file ZIP locale (una copia fresca mentre testavi una nuova correzione/modifica, ad esempio).
Nel mio esempio sopra, la copia installata rappresenta lo stesso plugin ma non è stata installata dalla Directory dei Plugin di WordPress. È stata installata da un file ZIP locale che equivale a un plugin ospitato privatamente.

Se vuoi davvero, puoi agganciarti a plugin_row_meta
e aggiungere il tuo link personalizzato.
Il problema è che il README parsato è ospitato nella WordPress Plugin Directory.
Il link standard "Visualizza dettagli" include /wp-admin/plugin-install.php?tab=plugin-information
che chiama http://api.wordpress.org/plugins/info/
di default.
Soluzione / Workaround
- Fornisci il tuo link personalizzato.
- (Opzionale) Agganciati alla risposta dell'API di WordPress.
Fornire il proprio link
Supponendo che tu sia nel file principale del tuo plugin, aggiungi questo:
add_filter(
'plugin_row_meta',
function( $plugin_meta, $plugin_file, $plugin_data ) {
if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
// Qui fornirai il link al tuo README.
// Ho convertito il mio `readme.txt` in HTML. Maggiori dettagli più avanti...
$url = plugins_url( 'readme.html', __FILE__ );
// Questa è un'adattamento di parte di `WP_Plugins_List_Table->single_row()`.
$plugin_meta[] = sprintf(
'<a href="%s" class="thickbox open-plugin-details-modal" aria-label="%s" data-title="%s">%s</a>',
add_query_arg( 'TB_iframe', 'true', $url ),
esc_attr( sprintf( __( 'Maggiori informazioni su %s' ), $plugin_data['Name'] ) ),
esc_attr( $plugin_data['Name'] ),
__( 'Visualizza dettagli' )
);
}
return $plugin_meta;
},
10,
3
);
Agganciarsi alla risposta dell'API di WordPress
Ancora una volta, supponendo che tu sia nel file principale del tuo plugin, devi aggiungere il link e agganciarti alla risposta dell'API:
$slug = 'slug-del-tuo-plugin-o-un-id';
add_filter(
'plugin_row_meta',
function( $plugin_meta, $plugin_file, $plugin_data ) {
if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
// Questa è un'adattamento di parte di `WP_Plugins_List_Table->single_row()`.
$plugin_meta[] = sprintf(
'<a href="%s" class="thickbox open-plugin-details-modal" aria-label="%s" data-title="%s">%s</a>',
esc_url(
network_admin_url(
"plugin-install.php?tab=plugin-information&plugin=$slug&TB_iframe=true&width=600&height=550"
)
),
esc_attr( sprintf( __( 'Maggiori informazioni su %s' ), $plugin_data['Name'] ) ),
esc_attr( $plugin_data['Name'] ),
__( 'Visualizza dettagli' )
);
}
return $plugin_meta;
},
10,
3
);
add_filter(
'plugins_api',
function( $response, $action, $args ) {
if ( 'plugin_information' === $action && $slug === $args->slug ) {
return (object) array(
// Simula la risposta dalla WordPress Plugin Directory.
// Per un esempio di richiesta, ispeziona
// https://api.wordpress.org/plugins/info/1.2/?action=plugin_information&request[slug]=classic-editor
);
}
return $response;
},
10,
3
);
Appendice: Convertire un README esistente
Se hai già scritto il tuo readme.txt
senza renderti conto che non verrà visualizzato (come me...), potresti convertirlo in HTML e usare il primo snippet di codice sopra.
Inserisci questo nel tuo package.json
:
{
"main": "Gruntfile.js",
"scripts": {
"readme": "grunt readme"
},
"devDependencies": {
"grunt": "^1.6.1",
"grunt-md2html": "^0.6.1",
"grunt-wp-readme-to-markdown": "^2.1.0"
}
}
E questo va nel tuo Gruntfile.js
:
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
wp_readme_to_markdown: {
your_target: {
files: {
'README.md': 'readme.txt',
},
},
options: {
// Opzionale: Solo se vuoi includere screenshot.
screenshot_url: 'assets/{screenshot}.png',
},
},
md2html: {
your_target: {
files: {
'readme.html': 'README.md',
},
},
},
});
grunt.loadNpmTasks('grunt-wp-readme-to-markdown');
grunt.loadNpmTasks('grunt-md2html');
grunt.registerTask('readme', ['wp_readme_to_markdown', 'md2html']);
};
Ora esegui npm install && npm run readme
e vedrai un readme.html
nella directory del tuo plugin.
