如何覆盖主题文件夹的” functions.php”文件中的插件功能?
下面是我的代码:
if(!function_exists('userphoto_filter_get_avatar')){
function userphoto_filter_get_avatar($avatar, $id_or_email, $size, $default){
global $userphoto_using_avatar_fallback, $wpdb, $userphoto_prevent_override_avatar;
if($userphoto_using_avatar_fallback)
return $avatar;
if(is_object($id_or_email)){
if($id_or_email->ID)
$id_or_email = $id_or_email->ID;
// Comment
else if($id_or_email->user_id)
$id_or_email = $id_or_email->user_id;
else if($id_or_email->comment_author_email)
$id_or_email = $id_or_email->comment_author_email;
}
if(is_numeric($id_or_email))
$userid = (int)$id_or_email;
else if(is_string($id_or_email))
$userid = (int)$wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_email = '" . mysql_escape_string($id_or_email) . "'");
if(!$userid)
return $avatar;
// Figure out which one is closest to the size that we have for the full or the thumbnail
$full_dimension = get_option('userphoto_maximum_dimension');
$small_dimension = get_option('userphoto_thumb_dimension');
$userphoto_prevent_override_avatar = true;
$img = userphoto__get_userphoto($userid, (abs($full_dimension - $size) < abs($small_dimension - $size)) ? USERPHOTO_FULL_SIZE : USERPHOTO_THUMBNAIL_SIZE, '', '', array(), '');
$userphoto_prevent_override_avatar = false;
if($img)
return $img;
return $avatar;
}
}
当我激活插件时, 它给了我一个致命错误:
无法重新声明userphoto_filter_get_avatar()。
我究竟做错了什么?
#1
将你的自定义替代代码添加到必须使用的插件中。
只能通过使用另一个插件或必须使用的插件来覆盖插件中定义的可插拔功能。将代码添加到另一个插件不可靠。因此, 最好使用必须使用的插件。
请注意, 可以通过在我们的插件或主题中使用相同名称的功能来覆盖WordPress核心中定义的可插入功能。
添加到主题的functions.php文件中的代码将在以后执行, 即在执行插件代码后执行。因此, 在主题文件中添加覆盖功能将触发无法重新声明错误。
原因:
在Plugin_API / Action_Reference中指定了各种WordPress操作的执行顺序。从这里我们可以看到, 简化的执行顺序是
- muplugins_loaded
- plugins_loaded
- after_setup_theme
因此, 要覆盖第二个挂钩中定义的功能(即在插件中), 我们需要在它之前执行的挂钩中(即在必用插件中)重新定义它。
评论前必须登录!
注册