Intereting Posts
определение собственного текста тизера для сообщения После переустановки изображений WordPress не отображаются в сообщениях? Использование локальных шаблонов и коротких кодов не работает Почему мой атрибут link не получает мой css? Как добавить ширину и высоту (разрешение) в функции wordpress? Как поместить последнюю отредактированную запись в верхней части списка блога? Как создать библиотеку фрагментов HTML для использования в сообщениях Используйте $ wp_customize-> add_control для создания выбора «Designed / Powered By» для выбора w / link в нижнем колонтитуле? переменная, созданная в page.php, имеет значение null внутри header.php Удаление поля «Веб-сайт» из комментариев и ответов? Получить содержимое / названия страниц различных страниц для использования в плагине выбор списка основных категорий без подкатегорий с разбивкой на страницы Как создать тему, как я могу позволить пользователю изменять изображение за пределами содержимого пост / страницы? Попытка получить свойство не-объекта «wordpress» Редактирование сложных страниц в визуальном режиме

Добавьте строку в пользовательскую базу данных и удалите все строки старше 1 дня

Я редактирую плагин счетчика просмотра так, чтобы он регистрировал IP-адрес каждого пользователя, просмотревшего сообщение. Это делается для предотвращения обновления страницы и создания искусственных представлений.

В той части, с которой я столкнулся, добавляются строки в таблицу базы данных, а затем удаляются любые строки, которые старше часа. Я уверен, что я делаю что-то неправильно, но я не могу понять, что. Документация WordPress по этому поводу очень сбивает меня с толку.

Это моя функция создания базы данных

### Create Database for IP Logging function postviews_create_table () { global $wpdb; $table_name = $wpdb->prefix . "postviews_ips"; $sql = "CREATE TABLE $table_name ( postid MEDIUMINT NOT NULL, ip VARCHAR(15) NOT NULL, time DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL );"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } 

И это функция, которая должна добавить новые строки и удалить старые.

 ### Add user IP to Database & Delete Entries Older Than 1 Day function postviews_add_ip () { global $post; $id = $post->ID; $ip = $_SERVER['REMOTE_ADDR']; $time = date("Ymd H:i:s"); $wpdb->insert( 'wp_postviews_ips', array( 'postid' => $id, 'ip' => $ip, 'time' => $time ) array( '%d', '%s', '%d' ) ); $sql = "DELETE FROM wp_postviews_ips WHERE time_created < (NOW() - INTERVAL 1 DAY)"; $wpdb->query($sql); } 

У вас несколько вещей перепутаны.

Во-первых, ваш запрос проверяет time_created , которого нет в вашей таблице.

Во-вторых, вы пытаетесь вставить дату в виде integer используя %d . Возможно, вам придется рассматривать его как строку.

Наконец, вы должны установить $wpdb в global в своей функции

 function postviews_add_ip () { global $post, $wpdb; // Database set to global $id = $post->ID; $ip = $_SERVER['REMOTE_ADDR']; $time = date("Ymd H:i:s"); $wpdb->insert( 'wp_postviews_ips', array( 'postid' => $id, 'ip' => $ip, 'time' => $time ), // added a colon array( '%d', '%s', '%s' // treat it as a string ) ); $sql = "DELETE FROM wp_postviews_ips WHERE time < (NOW() - INTERVAL 1 DAY)"; //changed rowname $wpdb->query($sql); } 

Размещение кода и структуры

Я бы настоятельно рекомендовал разделить функции вставки и удаления. Вы можете использовать wp-cron для удаления, поэтому вам не нужно постоянно вызывать эту функцию. Сама функция должна работать так, но, пожалуйста, обязательно ее оптимизируйте 🙂