web-dev-qa-db-fra.com

Afficher les messages de notification de mise à jour du type "Nouveautés"

Je suis sur le point de publier une nouvelle mise à jour pour mon plugin. J'ai utilisé quelques fonctions uniquement disponibles pour WordPress 3.8, ce qui me convient parfaitement car je souhaite prendre en charge la dernière version.

Comment puis-je afficher un message à l'utilisateur avant de mettre à jour le plug-in avec une liste de Nouveautés ou simplement un avertissement général indiquant que WordPress 3.8 est requis pour exécuter la dernière version du plugin?

J'ai joint une capture d'écran de l'endroit où j'aimerais que le message soit affiché. Est-ce quelque chose qui est affiché en fonction de ce que vous avez mis dans le journal des modifications de votre readme.txt dans le coffre?

enter image description here

2
EHerman

Vous pouvez vous connecter à in_plugin_update_message-{$file} .

Pour le plugin ci-dessus, le code correspondant se présente comme suit:

add_action('admin_menu', array($this,'admin_menu'), 11);
function admin_menu()
{
    global $pagenow;

    if( $pagenow == 'plugins.php' )
    {
        $hook = apply_filters('acf/get_info', 'hook');

        add_action( 'in_plugin_update_message-' . $hook, array($this, 'in_plugin_update_message'), 10, 2 );
    }
}

function in_plugin_update_message( $plugin_data, $r )
{
    $version = apply_filters('acf/get_info', 'version');
    $readme = wp_remote_fopen( 'http://plugins.svn.wordpress.org/advanced-custom-fields/trunk/readme.txt' );
    $regexp = '/== Changelog ==(.*)= ' . $version . ' =/sm';
    $o = '';

    if( !$readme )
    {
        return;
    }

    preg_match( $regexp, $readme, $matches );

    if( ! isset($matches[1]) )
    {
        return;
    }

    $changelog = explode('*', $matches[1]);
    array_shift( $changelog );

    if( !empty($changelog) )
    {
        $o .= '<div class="acf-plugin-update-info">';
        $o .= '<h3>' . __("What's new", 'acf') . '</h3>';
        $o .= '<ul>';

        foreach( $changelog as $item )
        {
            $item = explode('http', $item);

            $o .= '<li>' . $item[0];

            if( isset($item[1]) )
            {
                $o .= '<a href="http' . $item[1] . '" target="_blank">' . __("credits",'acf') . '</a>';
            }

            $o .= '</li>';


        }

        $o .= '</ul></div>';
    }

    echo $o;
}

Ad: Voici comment j'ai fait cela pour un plugin auquel je participe.

1
tfrommen