Методы Условного Контакта Пользователя с Идентификатором Не Сохраняются
Я работаю над плагином, который добавляет поля в методы контактов на странице профиля пользователя. Он проверяет, добавлен ли пользователь в базу данных плагинов, и возвращает 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 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
.
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;
}