플러그인에 사용 된 함수를 더 이상 사용하지 않는 방법은 무엇입니까?


17

플러그인에서 사용하는 함수 중 하나는 다른 함수 (다른 플러그인에서 사용)와 충돌 할 수있는 이름으로 전역 범위를 오염시키는 것입니다. 따라서 더 이상 사용하지 않아야한다고 생각합니다. 하지만 어떻게해야합니까?

function foo() {
    echo 'bar';
}

나는 알고 _deprecate_function()있지만 플러그인 코어에서 함수를 제거하기 위해 취해야 할 모든 단계를 보여주는 예제에 감사 할 것입니다.

참조 : https://developer.wordpress.org/reference/functions/_deprecated_function/


좋은 질문이지만 플러그인의 네임 스페이스를 작성해야 할 때입니까? 당신은 여전히 ... 당신의 사용되지 않는 기능에서 새 네임 스페이스를 호출 할 수 있습니다
brianlmerritt

Namespacing은 탐색하고 싶지만 아직 PHP 5.2에 대한 지원을 중단할지 여부를 결정하지 않은 옵션입니다.
henrywright

PHP 버전이 너무 낮지 만 네임 스페이스를 사용하지 않으면 더 이상 사용되지 않는 대안을로드하면 전환 경로가 제공 될 수 있습니다. 귀하의 사용되지 않는 메시지는 "호스팅 제공자는 PHP 5.3+ 저쩌구 등을 지원하지 않습니다"할 수있다
brianlmerritt

답변:


11

@Welcher의 답변 외에도 :

핵심 에는 몇 가지 좋은 " 묘지 "예제가 있으며, 여기서 " 기능이 죽게됩니다 ".

문서와 같은 지침으로 사용할 수 있습니다.

permalink_link()아래에 대한 그러한 예가 있습니다 .wp-includes/deprecated.php

/**
 * Print the permalink of the current post in the loop.
 *
 * @since 0.71
 * @deprecated 1.2.0 Use the_permalink()
 * @see the_permalink()
 */
function permalink_link() {
        _deprecated_function( __FUNCTION__, '1.2', 'the_permalink()' );
        the_permalink();
}

_deprecated_function입력 인수를 설명하는 함수에 대한 인라인 설명서는 다음과 같습니다 .

/**
 * Mark a function as deprecated and inform when it has been used.
 *
 * There is a hook deprecated_function_run that will be called that can be used
 * to get the backtrace up to what file and function called the deprecated
 * function.
 *
 * The current behavior is to trigger a user error if WP_DEBUG is true.
 *
 * This function is to be used in every function that is deprecated.
 *
 * @since 2.5.0
 * @access private
 *
 * @param string $function    The function that was called.
 * @param string $version     The version of WordPress that deprecated the function.
 * @param string $replacement Optional. The function that should have been called. 
 *                            Default null.
 */

1
고마워 나는 핵심에 의해 취해진 접근법을 보려고 생각하지 않았다! 그래서 나는 이것이 취해야 할 단계라고 가정합니다. 1) 내 함수에서 모든 원본 콘텐츠를 제거합니다. 2)에 전화 _deprecated_function()추가 3) 기존 함수를 대체하는 새 함수에 전화 추가
henrywright

1
이것은 여기서 논의되는 양면 문제인 것 같습니다. 더 이상 사용되지 않고 이름 충돌이있을 수 있습니다. 나는 질문의 제목에 따라 여기에서 첫 번째 부분 만 다루었습니다.
birgire

1
@MarkKaplun 두 가지 문제가 있음에 동의합니다. 문제는 기능을 사용하지 않는 방법이었고 이것이 내 대답의 기반이었습니다. __doing_it_wrong 공지는 테마 등에서이 메소드를 호출하는 개발자가 사이트를 화이트 스크린하는 것이 아니라 API의 변경 사항에 대응할 수 있도록하는 것입니다. Deprecated Notices는 핵심 변경 사항을 최신 상태로 유지하고이 경우에도 도움이되는 훌륭한 개발 플러그인입니다.
Welcher

1
@ MarkKaplun 당신의 요점을 참조하십시오. 그러나 사용 중단의 일부는 API에서 항목을 제거 할 때까지 이전 버전과의 호환성을 유지하는 것이라고 주장합니다. 통지의 요점은 (어떤 방법으로 생성했는지에 상관없이) 개발자에게 해당 방법을 사용하여 제거 될 것임을 알리고 이에 따라 행동 할 시간을 제공하는 것입니다. 더 이상 사용되지 않는 방법은 그것을 강조 표시하고 삭제하는 것입니다. 올바른 방법은 사용자에게 먼저 머리를
돌리는 것입니다.

2
@MarkKaplun 나는 당신이 무엇에 대해 논쟁하고 있는지 잘 모르겠습니다. 문제는 메소드를 더 이상 사용하지 않는 방법에 대한 것이었고 OP가 "my plugin"이라고 말하면 사용 중단이 자신이 개발자라는 것을 의미한다는 것을 알 수 있습니다. 당신이 이야기하고있는 가상의 사용자는이 특정한 질문과 관련이 없습니다. 로그에 백만 개의 알림을받는 것이 걱정된다면 문제의 메서드는 WP_DEBUG가 활성화 된 경우에만 출력되며 현재 개발자가 아닌 개발자가 활성화하지 않았을 것입니다. 나는 정중하게 동의합니다 :)
Welcher

7

지원 중단이 항상 제거되는 것과 같지는 않지만 일반적으로 항목이 API에서 EVENTUAL 제거로 표시되었음을 의미합니다. 이것은 다른 플러그인이나 개발자가 외부에서 호출하는 방법입니까? 이 메소드가 플러그인에서 내부적으로 만 사용되는 경우 더 나은 이름 기능으로 대체하여 안전하게 제거 할 수 있습니다.

그렇지 않으면, 나는 더 나은라는 이름의 함수를 작성하고 함께 심하게라는 이름의 하나의 호출을 거라고 __doing_it_wrong전화 -에 대해 읽어 사본을 이 방법으로 자신의 참조를 업데이트하는 다른 개발자에게 시간을 줄 것이다 안전하게의 방법을 제거 할 수 있습니다 이후 버전.

function badly_named() {

    __doing_it_wrong( 'badly_named', 'This method has been deprecated in favor of better_named_function' );

    /**
     * Call the better named method
     */
     better_named_function();
}

도움이 되었기를 바랍니다!


이것에 감사하지만 핵심이 어떻게하는지 복사해야한다고 생각합니다. 예를 들어 @birgire의 답변을 살펴보십시오.
henrywright

나에게 좋은 소리 :)
Welcher

1

새 플러그인을 작성하고 현재 플러그인이 EOL이므로 사용자에게 마이그레이션하도록 조언하십시오.

플러그인 및 테마 작성자가 퍼블릭 API를 변경하고이를 "소규모의 다른 업그레이드"로 취급하려고하는 것보다 더 성가신 것은 없습니다. 사용자가 실제로 영향을받지 않는 문제로 인해 사이트를 중단 할 이유가 없습니다.


다른 플러그인에 동일한 이름의 함수가 있고 네임 스페이스를 사용하지 않는 경우 내 사용자는이 영향을 완전히받습니다.
henrywright

아니요, 플러그인 활성화에 실패하고 사용자 또는 다른 플러그인 작성자에게 불만을 표시합니다. 전체 중단 시간은 약 0입니다. 새로운 플러그인으로 업그레이드하기 위해 두 플러그인이 모두 필요한 경우 사이트 작동을 중단하지 않고 15 분 이상 걸리지 않아야합니다. 원하는 것은 일부 사용자가 예고없이 더 이상 일부 기능이 더 이상 작동하지 않음을 업그레이드하고 발견한다는 것입니다. 고칠 시간? 당신은 그들이 전혀 백업이 있다고 고칠 수 있다고 생각합니까?
Mark Kaplun

일단 API를 만든 후에는 완전히 또는 적어도 완전히 지원하지 않을 때까지 API를 영원히 또는 최소한 유지해야합니다. 예를 들어 wordpress는 3.4 이후로 더 이상 사용되지 않는 API를 실제로 제거하지 않았으며 통지를 추가해도 아무런 효과가 없습니다.
Mark Kaplun

1
+1 귀하의 의견을 존중하고이 사이트에서 즐기는 것은 문제에 대한 다른 견해, 접근 방식 및 솔루션입니다. 일반적으로 모든 것에 맞는 단일 크기가 없기 때문입니다.
birgire

1

나는 다음과 같은 것을 제안 할 것이다 :

/**
 * @deprecated Please use good_function_name() instead
 * @since x.y.z Marked deprecated in favor of good_function_name()
 * @see good_function_name()
 */
function bad_function_name() {
    trigger_error(
        'The ' . __FUNCTION__ . ' function is deprecated. ' .
        'Please use good_function_name() instead.',
        defined( 'E_USER_DEPRECATED' ) ? E_USER_DEPRECATED : E_USER_WARNING
    );

    return good_function_name();
}

이는 스택 추적과 함께 로그에 폐기 경고를 표시하는 효과가 있습니다. 당연히 이것은 WordPress에서 로깅이 활성화 된 경우에만 작동합니다.

삼항 연산자는 E_USER_DEPRECATED 상수가 PHP 5.3.0에서만 도입 되었기 때문에 존재합니다. 이전 버전에서는 간단한 사용자 경고로 넘어갈 수 있습니다.

오류 상수에 대한 PHP 매뉴얼에서 :

E_DEPRECATED 런타임 알림. 향후 버전에서 작동하지 않을 코드에 대한 경고를 받으려면이 옵션을 활성화하십시오.

_doing_it_wrong 또는 __deprecated_function 을 사용하고 싶지 않은 이유 는 이러한 기능이 WordPress 핵심 전용이기 때문입니다. 해당 함수에 대한 코드 참조에서

이 기능의 액세스는 비공개로 표시됩니다. 이는 플러그인이나 테마 개발자가 다른 핵심 기능에서만 사용할 수 없음을 의미합니다. 완전성을 위해 여기에 나열되어 있습니다.


1
그것은 완전히 유효한 포인트 +1입니다. 그러나 우리는 Woocommerce와 같은 플러그인이 기능을 모두 사용한다는 것을 알 수 있습니다 . 상관없이.
birgire
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.