web-dev-qa-db-fra.com

Quelle est la méthode alternative à la fonction privée _doing_it_wrong () de WordPress

J'ai remarqué des plugins utilisant un motif singleton qui utilisera la fonction _doing_it_wrong() de WordPress dans leurs méthodes clone(), comme ceci:

<?php
public function __clone() {
    _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'divlibrary' ), $this->version );
}
?>

Mais j'ai aussi remarqué cet avertissement/cette remarque sur la documentation officielle de WordPress:  enter image description here 

Peu importe quand, comment un développeur l'utilise, WordPress recommande de ne pas l'utiliser, alors je me demande quelle est la bonne façon de procéder dans des plugins personnalisés? La méthode est utilisée pour la désapprobation du code, mais dans ce cas, le développeur souhaite simplement envoyer un avertissement/une alerte.

Référence: https://developer.wordpress.org/reference/functions/_doing_it_wrong/

7
Xtremefaith

Quelle est une méthode alternative à la fonction privée _doing_it_wrong () de WordPress?

Il est impossible que WordPress supprime jamais la fonction _doing_it_wrong(). Son utilisation est donc parfaitement sûre. Mais si, pour une raison quelconque, vous ne voulez pas l'utiliser parce qu'il est marqué comme privé, vous pouvez créer un plug-in doté d'une fonction appelée doing_it_wrong() copiée et collée à partir de _doing_it_wrong().

Une autre solution consisterait à ne pas copier le code mais à utiliser une classe gérant le code obsolète. Voici un exemple de code qui fait fondamentalement la même chose que _doing_it_wrong().

class deprecated {
  protected $method;
  protected $message;
  protected $version;

  public function method( $method ) {
    $this->method = $method;
    return $this;
  }

  public function message( $message ) {
    $this->message = $message;
    return $this;
  }

  public function version( $version ) {
    $this->version = sprintf( 
      __( 'This message was added in version %1$s.' ), 
      $version
    );
    return $this;
  }

  public function trigger_error() {
    do_action( 'doing_it_wrong_run', $this->method, $this->message, $this->version );
    if ( WP_DEBUG && apply_filters( 'doing_it_wrong_trigger_error', true ) ) {
      trigger_error( sprintf( 
        __( '%1$s was called <strong>incorrectly</strong>. %2$s %3$s' ),
        isset( $this->method ) ? $this->method : '', 
        isset( $this->message ) ? $this->message : '', 
        isset( $this->version ) ? $this->version : ''
      ) );
    }
  }
}

Usage

class wpse_238672 {
  public function some_deprecated_method() {
    ( new deprecated() )
      ->method( __METHOD__ )
      ->message( __( 
        'Deprecated Method: Use non_deprecated_method() instead.', 'wpse-238672'
       ) )
      ->version( '2.3.4' )
      ->trigger_error();

    $this->non_deprecated_method();
  }

  public function non_deprecated_method() {
  }
}
2
Nathan Johnson