Cum să afișez linkul [Vezi detalii] pentru un plugin WordPress
Cum pot face ca linkul [Vezi detalii] să apară în pagina de administrare a Pluginului, în zona de descriere?
Pluginul funcționează corect, versiunea și autorii (cu linkuri) sunt afișați corespunzător, dar nu apare [Vezi detalii] ca la majoritatea altor pluginuri.
Poate pun întrebarea greșit, dar lucrez la un plugin și aș dori să afișez conținutul din readme.txt și screenshot-uri așa cum văd la multe alte pluginuri. Cum pot face ca acest link să apară și să afișeze conținutul fișierului readme.txt?
Am citit cartea Professional WordPress Plugin Development, dar nu găsesc această referință. Pot să fac referire la un URI extern, dar aș prefera panoul elegant și concis care apare la alte pluginuri.

Legătura 'Vezi detalii' din tabelul listei de plugin-uri instalate este afișată doar pentru plugin-urile care sunt găzduite în depozitul de plugin-uri WordPress.org. Dacă te uiți la sursa pentru WP_Plugins_List_Table->single_row()
, vei observa că legătura de detalii este generată doar dacă există date API disponibile, de exemplu, dacă slug-ul este setat:
// Legătură detalii folosind informațiile API, dacă sunt disponibile
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( __( 'Mai multe informații despre %s' ), $plugin_name ) ),
esc_attr( $plugin_name ),
__( 'Vezi detalii' )
);
} elseif ( ! empty( $plugin_data['PluginURI'] ) ) {
$plugin_meta[] = sprintf( '<a href="%s">%s</a>',
esc_url( $plugin_data['PluginURI'] ),
__( 'Accesează site-ul plugin-ului' )
);
}

Nu ai menționat dacă plugin-ul tău este/nu este găzduit pe WordPress.org, nici dacă ai instalat plugin-ul din WordPress Plugin Directory sau doar o copie locală ZIP a acestuia (care este echivalentul unui plugin găzduit privat).
După cum am răspuns deja mai devreme, link-ul "Vezi detalii" apare doar pentru plugin-urile care au slug-ul găzduit pe WordPress.org.
Vreau doar să subliniez că există situații în care s-ar putea să nu vezi "Vezi detalii" chiar și pentru un plugin care este de fapt găzduit de WordPress.org.
Cum? În ce situație?
Exemplu: imaginează-ți că plugin-ul tău este găzduit de ei, dar de fapt nu ai instalat plugin-ul din WordPress Plugin Directory, ci ai instalat un fișier ZIP local (o copie nouă a acestuia în timp ce testai o nouă remediere/optimizare, de exemplu).
În exemplul meu de mai sus, copia instalată reprezintă același plugin, dar nu este instalată din WordPress Plugin Directory. A fost instalată dintr-un fișier ZIP local, care este echivalentul unui plugin găzduit privat.

Dacă chiar dorești, poți folosi hook-ul plugin_row_meta
pentru a adăuga propriul tău link.
Problema este că README-ul procesat este găzduit pe WordPress Plugin Directory.
Link-ul standard "Vezi detalii" include /wp-admin/plugin-install.php?tab=plugin-information
care apelează implicit http://api.wordpress.org/plugins/info/
.
Soluție / Soluție Alternativă
- Furnizează propriul tău link.
- (Opțional) Conectează-te la răspunsul API-ului WordPress.
Furnizarea propriului link
Presupunând că ești în fișierul principal al plugin-ului, adaugă asta:
add_filter(
'plugin_row_meta',
function( $plugin_meta, $plugin_file, $plugin_data ) {
if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
// Aici furnizezi link-ul către README-ul tău.
// Am convertit `readme.txt` în HTML. Mai multe detalii mai târziu...
$url = plugins_url( 'readme.html', __FILE__ );
// Aceasta este o adaptare a unei părți din `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( __( 'Mai multe informații despre %s' ), $plugin_data['Name'] ) ),
esc_attr( $plugin_data['Name'] ),
__( 'Vezi detalii' )
);
}
return $plugin_meta;
},
10,
3
);
Conectarea la răspunsul API-ului WordPress
Din nou, presupunând că ești în fișierul principal al plugin-ului, trebuie să adaugi link-ul și să te conectezi la răspunsul API:
$slug = 'slug-ul-pluginului-tau-sau-un-id';
add_filter(
'plugin_row_meta',
function( $plugin_meta, $plugin_file, $plugin_data ) {
if ( __FILE__ === path_join( WP_PLUGIN_DIR, $plugin_file ) ) {
// Aceasta este o adaptare a unei părți din `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( __( 'Mai multe informații despre %s' ), $plugin_data['Name'] ) ),
esc_attr( $plugin_data['Name'] ),
__( 'Vezi detalii' )
);
}
return $plugin_meta;
},
10,
3
);
add_filter(
'plugins_api',
function( $response, $action, $args ) {
if ( 'plugin_information' === $action && $slug === $args->slug ) {
return (object) array(
// Simulează răspunsul de la WordPress Plugin Directory.
// Pentru un exemplu de cerere, inspectează
// https://api.wordpress.org/plugins/info/1.2/?action=plugin_information&request[slug]=classic-editor
);
}
return $response;
},
10,
3
);
Anexă: Conversia unui README existent
Dacă ai scris deja readme.txt
fără să realizezi că nu va fi afișat (ca mine...), poți să-l convertești în HTML și să folosești primul fragment de cod de mai sus.
Adaugă asta în 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"
}
}
Și asta în 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: {
// Opțional: Doar dacă vrei să incluzi capturi de ecran.
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']);
};
Acum rulează npm install && npm run readme
și vei vedea un fișier readme.html
în directorul plugin-ului tău.
