Fatal Errors on pluggable.php

时间:2013-06-12 作者:Jusherb

我想更改所有已发送邮件中的“Wordpress”名称。过去,我已经定制了Wordpress后端来显示我想要的电子邮件。但我下载了一个新插件,它改变了电子邮件名称字段。我试图再次更改它,但这次是在可插拔中。php模板文件。

然而,事情并没有按计划进行,现在我有一个致命的错误:

致命错误:调用/home/content/61/7791761/html/Portal/wp includes/plugable中未定义的函数\\u fill\\u user()。php在线199

我需要修复这个问题,似乎它与$wpdb变量有关

/**
 * Retrieve user info by a given field
 *
 * @since 2.8.0
 *
 * @param string $field The field to retrieve the user with.  id | slug | email | login
 * @param int|string $value A value for $field.  A user ID, slug, email address, or      login name.
 * @return bool|object False on failure, User DB row object
 */
function get_user_by($field, $value) {
global $wpdb;

switch ($field) {
    case \'id\':
        return get_userdata($value);
        break;
    case \'slug\':
        $user_id = wp_cache_get($value, \'userslugs\');
        $field = \'user_nicename\';
        break;
    case \'email\':
        $user_id = wp_cache_get($value, \'useremail\');
        $field = \'user_email\';
        break;
    case \'login\':
        $value = sanitize_user( $value );
        $user_id = wp_cache_get($value, \'userlogins\');
        $field = \'user_login\';
        break;
    default:
        return false;
}

 if ( false !== $user_id )
    return get_userdata($user_id);

 if ( !$user = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->users WHERE $field = %s", $value) ) )
    return false;

_fill_user( $user );

return $user;
}
endif;   

3 个回复
SO网友:a web dev

不要直接修改那些文件。当该文件在更新中更改时,它将中断。改为这样做。

add_filter( \'wp_mail_from\', \'override_mail_from_address\' );
add_filter( \'wp_mail_from_name\', \'override_mail_from_name\' );

function override_mail_from_address($email_address) {
    $from_array = explode(\'@\', $email_address);
    $from_address = $from_array[0];
    $from_domain = $from_array[1];

    if (strtolower($from_address) == \'wordpress\') {
        $from_address = "myname"; /* Put the email address you want here */
    }

    return ( $from_address . \'@\' . $from_domain );
}

function override_mail_from_name($email_name) {
    if (strtolower($email_name) == \'wordpress\') {
        $email_name = "My Name"; /* Put the name you want here */
    }

    return ( $email_name );
}

SO网友:s_ha_dum

如果有合适的钩子可以完成这项工作,比如@XIROXAS answer,我认为使用这些钩子是最好的解决方案,但是pluggable.php 包含以下函数:meant to be overwritten.

例如,如果要更改get_user_by, 正如您在问题中提到的,只需在插件文件中使用该名称创建您自己的函数,它将被使用,而不是pluggable.php.

请注意:

WordPress核心不再添加可插拔功能。所有新函数都在其输出上使用过滤器,以允许对其功能进行类似的重写。

http://codex.wordpress.org/Pluggable_Functions

我怀疑这意味着这些最终会被弃用,但这只是一个猜测,它们目前还没有被列为这样,因此应该仍然可以安全使用。

现在,我找不到_fill_user 在我的WordPress 3.5.1上。我grep把整件事都搞砸了。我想它已经被删除了,但找不到确切的时间信息。上次我在get_user_by 是WordPRess 3.2。无论如何,您发布的函数模仿了old version of get_user_by. Compare against the new version.

无论添加了什么,可插入功能都添加了一个似乎与当前WordPress核心不兼容的功能。需要重写才能在没有_fill_user

如果您的pluggable.php 它本身,而且看起来可能,仍然需要_fill_user 某个地方的更新可能出错,您需要重新加载该文件。重新加载所有核心文件并没有什么坏处,只是为了确保一切都按原样进行。

SO网友:Rick Hellewell

延迟回答,但这可能有助于其他人:

但是如果你的插件需要pluggables中的函数。php(如wp\\u safe\\u redirect),然后您必须手动包含该文件。否则,对于该插件中的函数,会出现“调用未定义函数”错误。php文件。

我是这样做的

    if ( !function_exists(\'wp_safe_redirect\')) {
        require_once (ABSPATH . WPINC . \'/pluggable.php\');
     }
将函数名(在本例中为“wp\\u safe\\u redirect”)替换为所需的函数。

也许这会节省一些人我花了几个小时试图找出那个错误。

结束

相关推荐

在生成缩略图之前使用phpThumb处理上传

我想知道是否有人知道一种方法(通过函数、插件或其他方法)可以使用phpThumb处理上传的图像,然后让Wordpress从原始图像和处理后的图像中生成通常的图像大小?基本上,我使用phpThumb生成一个alpha通道版本的图像,用于某些特定区域,使用这个(其中h&w是测量值或原始图像,可能是可变的)<img src=\"phpThumb/phpThumb.php?src=black.jpg&h=487&w=320&iar=1&fltr[]=mask|original