Есть ли какая-то особая причина, по которой вы создаете свое собственное соединение и обработчик mysqli? Поскольку вы используете WordPress, у вас есть доступ к классу $wpdb
, который значительно проще использовать с меньшими настройками и без необходимости заботиться о санации значений, и т. Д. c. (если вы не используете один из методов, выполняющих строгий запрос SQL, и в этот момент вы захотите использовать $wpdb::prepare()
)
Если вам НУЖНО использовать ваше собственное соединение с mysqli, не стесняйтесь заменить функцию обновления $ wpdb-> на ваш запрос ниже - но, как сказал @Dharman, вам нужно использовать подготовленные параматеризованные операторы, в противном случае вы открыты для SQL Инъекции .
Тем не менее проблема заключается в том, что хук wp_login
не срабатывает достаточно поздно, чтобы иметь надлежащий доступ к wp_get_current_user()
function.
Если вы посмотрите документы для хука wp_login
, вы увидите, что у него есть 2 аргумента, $user_login
и $user
, эти дать вам доступ к имени пользователя и WP_User
объекту соответственно.
Для того, чтобы эти аргументы были доступны в области видимости вашей функции, вы должны указать этому хуку, сколько аргументов принимать при звонке add_action()
. Значение по умолчанию: 1
.
. Этот код, приведенный ниже, должен работать после изменения имени таблицы. Вы заметите, что я использую метод $wpdb::update()
. Этот метод позволяет вам вызывать $wpdb::prepare()
, поэтому вам не нужно больше беспокоиться о очистке этого значения - , но никогда не бывает плохой идеей данные, которые вы проверяете, имеют формат, который вы ожидаете! . Я не включил ничего подобного, но вы можете запустить это значение с помощью некоторых функций WP Sanitization / Escaping и / или PHP filter_var , если вы используете sh .
add_action( 'wp_login', 'mv_update_notification_data', 99, 2 ); // Later priority, and pass 2 args)
function mv_update_notification_data( $user_login, $user ){
global $wpdb; // Give this function access to the `$wpdb` class
$user_facility = get_user_meta( $user->ID, 'user_facility', true );
if( $user_login == $user_facility . 'DOC' ){
$result = $wpdb->update(
$YOUR_TABLE_NAME,
array(
'doc_notified' => 1
),
array(
'facility' => $user_facility
),
array(
'%d'
),
array(
'%s'
)
);
// Do something with `$result` (returns: [int|false])
}
}
РЕДАКТИРОВАТЬ:
Если (по какой-то причине) вы хотите использовать строгий запрос вместо $wpdb->update()
, вы можете использовать $wpdb::query()
метод. Для простых вставок / обновлений встроенных функций stati c достаточно , обычно , но для того, чтобы увидеть, как $wpdb
обрабатывает SQL запросов, вы можете заменить всю функцию $wpdb->update();
выше со следующим:
$sql = "UPDATE db SET doc_notified = 1 WHERE facility = %s";
$args = array( $user_facility );
$result = $wpdb->query( $wpdb->prepare( $sql, $args ) );