Методы Условного Контакта Пользователя с Идентификатором Не Сохраняются


Я работаю над плагином, который добавляет поля в методы контактов на странице профиля пользователя. Он проверяет, добавлен ли пользователь в базу данных плагинов, и возвращает 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
Author: Andre Yonadam, 2014-08-21

2 answers

Проблема в том, что $profileuser инициализируется только user-edit.php, но обновление публикуется в /wp-admin/profile.php и не доходит до редактирования пользователем перед запуском обработчика user_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.

 2
Author: Rup, 2014-08-21 18:06:10

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;
}
 2
Author: Mark Kaplun, 2014-08-22 06:44:30