it-swarm.dev

Jak vytvořit vlastní zprávu o pluginu

Tuto zprávu jsem viděl (a) dnes při přístupu na stránku pluginu: custom plugin update message

Tak, jak to mám vytvořit, pokud chci aktualizovat své vlastní pluginy, které jsou hostovány na wordpress?

10
ariefbayu

Tato zpráva je vytvořena W3_Total_Cache->in_plugin_update_message() závislá na "in_plugin_update_message-$file"in wp_plugin_update_row().

To dělá některé nifties analyzovat readme a zobrazovat informace z changelog, ale celkově můžete prostě echo některé věci, jako u jiných háčků.

9
Rarst

Budova háku

Chcete-li vymazat název háku akce:

global $pagenow;
if ( 'plugins.php' === $pagenow )
{
    // Better update message
    $file   = basename( __FILE__ );
    $folder = basename( dirname( __FILE__ ) );
    $hook = "in_plugin_update_message-{$folder}/{$file}";
    add_action( $hook, 'your_update_message_cb', 20, 2 );
}

Funkce zavolání zpětného volání

Samotná funkce má dvě $variables připojené: $plugins_data & $r, které mohou být zpřístupněny vaším pluginem.

/**
 * Displays an update message for plugin list screens.
 * Shows only the version updates from the current until the newest version
 * 
 * @param (array) $plugin_data
 * @param (object) $r
 * @return (string) $output
 */
function your_update_message_cb( $plugin_data, $r )
{
    // readme contents
    $data       = file_get_contents( 'http://plugins.trac.wordpress.org/browser/YOUR_PLUGIN_FOLDER_NAME_IN_THE_OFFICIAL_REPO/trunk/readme.txt?format=txt' );

    // assuming you've got a Changelog section
    // @example == Changelog ==
    $changelog  = stristr( $data, '== Changelog ==' );

    // assuming you've got a Screenshots section
    // @example == Screenshots ==
    $changelog  = stristr( $changelog, '== Screenshots ==', true );

    // only return for the current & later versions
    $curr_ver   = get_plugin_data('Version');

    // assuming you use "= v" to prepend your version numbers
    // @example = v0.2.1 =
    $changelog  = stristr( $changelog, "= v{$curr_ver}" );

    // uncomment the next line to var_export $var contents for dev:
    # echo '<pre>'.var_export( $plugin_data, false ).'<br />'.var_export( $r, false ).'</pre>';

    // echo stuff....
    $output = 'whatever you want to do';
    return print $output;
}

Poznámka pod čarou:

Tento přístup lze nalézt v Interní kontrola odkazů plugin.

Přidání:

plugin_basename(__FILE__) lze použít místo těchto dvou řádků výše. Kontrola, zda aktuální stránka je stránka pluginu, není ve skutečnosti nezbytná, protože tato stránka bude stejně vyvolána pouze touto stránkou. (Velmi malá) výhoda stále je, že nemáte další zpětné volání připojené. Vzhledem k tomu, že tato odpověď je dost stará, měli byste, i když tento přístup funguje bez problému, nyní zkontrolovat proti objektu vrácenému příkazem get_current_screen() .

10
kaiser