Как можно избавиться от сообщений PHP Notice в WordPress?

Как исправить сообщение ошибки "Функция wpdb::prepare вызвана неправильно. Аргумент запроса метода wpdb::prepare() должен содержать описатель преобразований" в WordPress при использовании функции для вывода даты регистрации пользователя?
  • 6 мая 2024 г. 18:40
Ответы на вопрос 2
1. Для избавления от сообщений PHP Notice в WordPress можно:
- Установить уровень отображения ошибок в php.ini на уровень E_ALL & ~E_NOTICE, чтобы скрыть сообщения Notice.
- Добавить код error_reporting(E_ALL & ~E_NOTICE); в файл functions.php темы или файл wp-config.php.
- Использовать функцию error_reporting(0); в файле functions.php темы или файле wp-config.php.

2. Для исправления ошибки "Функция wpdb::prepare вызвана неправильно. Аргумент запроса метода wpdb::prepare() должен содержать описатель преобразований" можно изменить код следующим образом:
```
global $wpdb;
$user_id = get_current_user_id();
$user_registration_date = $wpdb->get_var( $wpdb->prepare( 
    "SELECT user_registered FROM $wpdb->users WHERE ID = %d", $user_id 
) );

// Вывод даты регистрации пользователя
echo $user_registration_date;
```

Это исправленный код использует корректный синтаксис функции wpdb::prepare, предоставляя значение для %d в запросе SQL.
prepare - это "подготовить", а "подготавливают" некий шаблон, в который потом пробрасывают значения. "Подготавливать" без значений некорректно. 

- $wpdb->get_var($wpdb->prepare('SELECT user_registered FROM '.$wpdb->users.' WHERE ID="'.$id.'"'));
+ $wpdb->get_var('SELECT user_registered FROM '.$wpdb->users.' WHERE ID="'.$id.'"');


Однако, выглядит это не безопасно (как минимум, $id не типизирован). По-этому лучше пробросить его в prepare

$wpdb->get_var(
    $wpdb->prepare("SELECT user_registered FROM $wpdb->users WHERE ID=%d", $id)
);
Похожие вопросы