web-dev-qa-db-fra.com

Enregistrer le numéro de version du plugin en option?

Il me semble me rappeler avoir vu un conseil quelque part disant qu'il était recommandé de conserver le numéro de version d'un plugin en option. Je travaille à la publication d'un plugin, et je réfléchis à l'opportunité de le faire, mais comme tout le plugin ne crée qu'un widget (pour le moment, il n'a littéralement aucune autre option), j'ai du mal à comprendre ce que je voudrais jamais faire avec cette option. Je fixe déjà une constante avec le numéro de version à utiliser dans quelques emplacements (principalement wp_enqueue_*).

Quelqu'un peut-il m'indiquer une bonne ressource ou expliquer les cas d'utilisation de la sauvegarde du numéro de version en option?

4
mrwweb

Vous devez enregistrer la version dans la base de données - aka. enregistrez-le "en tant qu'option" afin que votre script ait un cas de comparaison. C'est-à-dire que votre script devrait ...

  1. Vérifier la base de données pour un numéro de version
  2. Comparez ce numéro de version au nouveau numéro de version - une variable ou une constante dans votre fichier de plugin.
  3. Mettre à jour les choses si besoin est
  4. Enregistrer le nouveau numéro de version dans la base de données

Si tout ce que vous avez est une constante dans votre fichier .php. Cela correspond toujours, ce qui signifie que c'est pratiquement inutile pour toute mise à jour automatisée. Bien sûr, vous pouvez garder une trace des versions de plug-in avec seulement la constante, mais le point de l'enregistrer dans la base de données est de pouvoir mettre à jour automatiquement les éléments lorsque cela est nécessaire.

Comme vous le dites, si le plugin est assez simple, cela n’est peut-être pas nécessaire.

1
s_ha_dum

Fondamentalement, oui , vous le stockez dans les deux formats, en option et en tant que constante à des fins de comparaison. Il fournit une couche de freins et contrepoids qui n’est pas plus difficile à mettre en œuvre que de ne pas le faire au départ. Vérité ...

Référez-vous au fil de discussion suivant pour quelques exemples intéressants:
Remarque: aucun des codes présentés ici n’est le mien, donc crédit complet là où le crédit est dû!


Question: Publication de la nouvelle version du plugin, comment renommer les anciennes clés d'options?

m0r7if3r fournit les éléments suivants https: //wordpress.stackexchange .com/a/49736/13418

if( $db_version < {your desired version} ) {
    // previous updates and such
    $db_version = $new_version; //put that in the database
}
if( $db_version < $current_version ) {
    create $options array
    foreach( $option as $o ) {
        if( get_option( $o['old_name'] ) ) {
            update_option( $o['new_name'], get_option( $o['old_name'] ) );
            delete_option( $o['old_name'] ); //clean up behind yourself
        }
    }
    and then update your database version again
}

qui est la réponse acceptée à cette question.

Cependant,

Un tour de poney se poursuit pour élaborer sur cet exemple avec un joli morceau de code en réponse ...

class MyPlugin{

  const 
    OPTION_NAME = 'my_plugin_options',
    VERSION     = '1.0';

  protected
    $options  = null,

    // default options and values go here
    $defaults = array(
                  'version'     => self::VERSION, // this one should not change
                  'test_option' => 'abc',
                  'another_one' => 420, 
                );

  public function getOptions(){

    // already did the checks
    if(isset($this->options))
      return $this->options;    

    // first call, get the options
    $options = get_option(self::OPTION_NAME);

    // options exist
    if($options !== false){

      $new_version = version_compare($options['version'], self::VERSION, '!=');
      $desync = array_diff_key($this->defaults, $options) !== array_diff_key($options, $this->defaults);

      // update options if version changed, or we have missing/extra (out of sync) option entries 
      if($new_version || $desync){

        $new_options = array();

        // check for new options and set defaults if necessary
        foreach($this->defaults as $option => $value)
          $new_options[$option] = isset($options[$option]) ? $options[$option] : $value;        

        // update version info
        $new_options['version'] = self::VERSION;

        update_option(self::OPTION_NAME, $new_options);
        $this->options = $new_options;  

      // no update was required
      }else{
        $this->options = $options;     
      }


    // new install (plugin was just activated)
    }else{
      update_option(self::OPTION_NAME, $this->defaults);
      $this->options = $this->defaults; 
    }

    return $this->options; 

  }    

}

S'il vous plaît, n'acceptez pas cette réponse comme étant la bonne réponse, je fournis simplement des éléments de support supplémentaires que j'ai comme référence et qui, à mon avis, étayent bien ce sujet.

Cependant, montrez votre soutien et votez en hausse leurs réponses si vous les utilisez avec un quelconque succès.

6
userabuser

Je pense que vous faites référence au livre Wrox WordPress Plugin ou peut-être quelque chose sur Ozh et als Blog. Je viens également de le lire dans le guide des plugins Apress WordPress.

L'argument est que, en enregistrant le numéro de version dans la base de données, lorsque vous publiez une mise à jour du plug-in, vous avez plus de contrôle sur ce qu'il faut 'mettre à jour' ... le code ressemble à ceci:

DEFINE VERSION (1.0);

function add_settings();
if (get_option(youroptions[VERSION]) === false { 
 \\ ie first time user
    add_option(youroptions[version]) = VERSION;
    add_option(youroptions[anotheroption]) ;
}
elseif (get_option(youroptions[VERSION]) !='1.0'{ 
 \\user has old plugin ... do something for them
   add_option(youroptions[optionname])
}

Est ce que ça aide? J'utilise l'exemple de code ci-dessus du livre Apress WP (mais je l'ai saisi de mémoire).

0
Damien