ID有条件的用户联系方式未保存

时间:2014-08-21 作者:Andre Yonadam

我正在开发一个插件,它将字段添加到用户配置文件页面上的联系人方法中。它检查用户是否已添加到插件数据库,如果已添加,则返回1。这是可行的,插件只向用户显示联系人字段,用户通过它添加的联系人字段不会让他们保存联系人字段中的更改。

add_filter(\'user_contactmethods\', \'contactmethods\');

function contactmethods($user_contactmethods){
global $wpdb;
global $profileuser;
$id = $profileuser->ID;
$table  = $wpdb->prefix . "table";
$myrows = NULL;
$myrows = $wpdb->query($wpdb->prepare(\'SELECT 1 FROM \' . $table . \' WHERE id = %d LIMIT 1\', $id));
    if($ba_myrows == 1){
        $user_contactmethods[\'option\'] = \'link\';
    }
    return $user_contactmethods;
}

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

问题是$profileuser 仅由初始化user-edit.php 但更新已发布到/wp-admin/profile.php 在保存上下文中运行user\\u contactmethods处理程序之前,不会进行用户编辑,即。$profileuser 在实际运行更新时不可用。

幸运的是,还有另一个全球$user_id 在联系人页面和联系人更新处理程序中初始化。相反,请尝试:

function contactmethods($user_contactmethods) {
    global $wpdb;
    global $user_id;

    $table  = $wpdb->prefix . "table";
    $myrows = NULL;
    $myrows = $wpdb->query($wpdb->prepare(\'SELECT 1 FROM \' . $table . \' WHERE id = %d LIMIT 1\',
                           $user_id));

    if($ba_myrows == 1) {
        $user_contactmethods[\'option\'] = \'link\';
    }
    return $user_contactmethods;
}
即使用$user_id 代替您的$id 计算自$profileuser.

SO网友:Mark Kaplun

user_contactmethods 筛选器获取两个参数,您将忽略它们。

正确的代码应为

add_filter(\'user_contactmethods\', \'contactmethods\',10,2);

function contactmethods($methods,$user){
global $wpdb;
$id = $user->ID;
$table  = $wpdb->prefix . "table";
$myrows = NULL;
$myrows = $wpdb->query($wpdb->prepare(\'SELECT 1 FROM \' . $table . \' WHERE id = %d LIMIT 1\', $id));
    if($ba_myrows == 1){
        $user_contactmethods[\'option\'] = \'link\';
    }
    return $user_contactmethods;
}

结束

相关推荐

How can I find plugins' slug?

我想知道如何才能找到插件的slug(slug=WordPress用来更新插件和确定哪些插件当前处于活动状态的内部名称)?它通常是插件的文件夹名,但如果插件没有文件夹,则是其文件名(如hello.php)。是否有其他例外情况?大小写字符重要吗</插件的slug是否可以与其文件夹名不同?如果有一个叫做hello的插件呢。php和另一个/您好。php/您好。php