it-swarm.com.ru

Каков альтернативный метод закрытой функции WordPress _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(), поэтому использовать ее совершенно безопасно. Но если по какой-то причине вы не хотите использовать его, потому что он помечен как приватный, вы можете создать плагин с функцией 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