如何弃用插件中使用的函数?

时间:2015-12-22 作者:henrywright

我在插件中使用的一个函数正在用一个可能与另一个函数(在另一个插件中使用)冲突的名称污染全局范围。所以,我想我应该反对它。但我该怎么做呢?

function foo() {
    echo \'bar\';
}
我知道_deprecate_function() 但如果能给我一个示例,说明我应该采取的所有步骤,以便从插件的核心中删除该函数,我将不胜感激。

参考号:https://developer.wordpress.org/reference/functions/_deprecated_function/

4 个回复
最合适的回答,由SO网友:birgire 整理而成

除了@Welcher的回答之外:

核心部分有一些很好的“墓地”示例,其中“functions come to die”。

您可以将其用作指南,例如关于文档。

这里有一个这样的例子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.
 */

SO网友:Welcher

弃用并不总是等于删除,它通常意味着该项被标记为最终从API中删除。这是一种外部调用的方法吗?就像其他插件或开发人员在中调用一样?如果这个方法只在插件内部使用过,您可能可以安全地删除它,并用更好的函数名替换它。

如果没有,我会创建名称更好的函数,让名称不好的函数用__doing_it_wrong 致电-在codex 这将使其他开发人员有时间更新对该方法的引用,您可以在更高版本中安全地删除该方法。

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();
}
希望这有帮助!

SO网友:alexg

我建议如下:

/**
 * @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中启用了日志记录,这才有效。

之所以有三元运算符,是因为PHP 5.3.0中才引入了E\\u USER\\u弃用常量。在旧版本中,我们可以使用简单的用户警告。

PHP manual on error constants:

E_DEPRECATED 运行时通知。启用此选项可接收有关在未来版本中无法工作的代码的警告。

我不喜欢使用的原因_doing_it_wrong__deprecated_function 这些功能仅用于WordPress核心。从这些函数的代码参考中:

此函数的访问被标记为私有。这意味着它不适用于插件或主题开发人员,仅用于其他核心功能。为了完整起见,这里列出了它。

SO网友:Mark Kaplun

您创建了一个新插件,并建议用户迁移到它,因为当前的插件是EOL。

没有什么比插件和主题作者更改公共API并试图将其视为“又一次小升级”更令人恼火的了。没有理由因为你的用户实际上没有受到影响的问题而破坏网站。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请