web-dev-qa-db-ja.com

WordPressのprivate _doing_it_wrong()関数に代わる方法は何ですか?

私は、プラグインが_doing_it_wrong()メソッドでWordPressのclone()関数を使うシングルトンパターンを使っているのに気付きました。

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

しかし、私はWordPressの公式文書でこの警告/注意にも気づきました: enter image description here 

開発者がそれをどのように使用しているか、WordPressがそれを使用すべきではないと主張しているのは本当に問題ではありません。このメソッドはコードを非推奨にするために使用されますが、この例では開発者は単に警告/警告を送信したいだけです。

参照: https://developer.wordpress.org/reference/functions/_doing_it_wrong/

7
Xtremefaith

WordPressのプライベートの_doing_it_wrong()関数の代替メソッドは何ですか?

WordPressが_doing_it_wrong()関数を取り除くつもりはないので、それを使うのは完全に安全です。しかし、何らかの理由でそれがprivateとマークされていて使用したくない場合は、doing_it_wrong()からコピー&ペーストされた_doing_it_wrong()という関数を持つプラグインを作成することができます。

別の方法は、コードをコピーせずに、廃止予定のコードを処理するクラスを使用することです。これは基本的に_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 : ''
      ) );
    }
  }
}

使用法

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