wake-up-neo.net

Was ist eine alternative Methode zur WordPress-Funktion private _doing_it_wrong ()

Ich habe Plugins entdeckt, die ein Singleton-Muster verwenden, das die _doing_it_wrong() -Funktion von WordPress in ihren clone() -Methoden verwendet.

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

Aber ich habe auch diese Warnung/diesen Hinweis in der offiziellen Dokumentation von WordPress bemerkt:  enter image description here 

Es ist wirklich egal, wann und wie ein Entwickler es verwendet. WordPress rät dazu, es nicht zu verwenden. Ich frage mich also, wie dies in benutzerdefinierten Plugins richtig gemacht werden kann. Die Methode wird verwendet, um Code zu veralten, aber in diesem Fall möchte der Entwickler nur eine Warnung/Warnung senden.

Referenz: https://developer.wordpress.org/reference/functions/_doing_it_wrong/

7
Xtremefaith

Was ist eine alternative Methode zur WordPress-Funktion private _doing_it_wrong ()?

Es gibt keine Möglichkeit, dass WordPress jemals die Funktion _doing_it_wrong() loswird, daher ist es absolut sicher, sie zu verwenden. Wenn Sie es jedoch aus irgendeinem Grund nicht verwenden möchten, weil es als privat markiert ist, können Sie ein Plugin mit der Funktion doing_it_wrong() erstellen, das aus _doing_it_wrong() kopiert und eingefügt wird.

Eine andere Möglichkeit wäre, keinen Code zu kopieren und stattdessen eine Klasse zu verwenden, die veralteten Code verarbeitet. Hier ist ein Beispielcode, der im Grunde das Gleiche tut wie _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 : ''
      ) );
    }
  }
}

Verwendungszweck

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