Intereting Posts
Ссылки галереи изображений на средний образ вместо полноразмерного изображения WP Job Manager Resume Add on Отображает значение только что добавленного поля Изменение всей постоянной ссылки Изменено имя URL, не используемое в permalink Инструментарий социального обмена не отображается при загрузке ajax Пользовательское поле поиска категорий для WordPress Сообщения, созданные в пользовательском типе сообщений, теряются, если публикуются без заголовка Как изменить форматирование HTML ссылки oEmbed? WP Rest API: информация о последнем сообщении, включая URL-адрес медиа-ресурса в одном запросе? Создан пользовательский тип сообщения, но выбранный шаблон не остался выбранным. Как я могу отображать все значения настраиваемого поля из сообщений с определенным значением другого настраиваемого поля или из определенных типов сообщений? Звуковая ссылка WordPress не работает query_posts добавляет два "пост-входа" divs Невозможно создать сеть поддоменов – и WP устанавливается в webroot, а не в папку Управление пользователями, блоги, чат

Использование включения upgrade.php при создании пользовательских запросов

Я начал создавать плагин, в котором мне нужно создать некоторые пользовательские запросы с помощью wpdb объекта. Это первый раз, когда я использую его. Поэтому я проверил, как его использовать. Я наблюдал за некоторыми примерами, и есть что-то, что испортило мне голову: upgrade.php

Фактически, когда я создаю пользовательский запрос, этот работает только тогда, когда я включаю upgrade.php следующим образом:

 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); $custom_posts = $wpdb->get_results( 'SELECT * FROM ' . self::TABLE . '', OBJECT_K ); $wpdb->show_errors(); echo $wpdb->last_query; return $custom_posts; 

Это всего лишь один из примеров метода, который я могу использовать.

Что такое upgrade.php ? Я имею в виду, если я не стану, запрос не работает. Может кто-нибудь объяснить, пожалуйста, потому что в кодексе ничего нет.

Неужели я действительно удержал его? Зачем ? Как ?

благодаря

ОБНОВЛЕНИЕ: Вот полный код.

 /** * On activate or uninstall plugin */ register_activation_hook( __FILE__, array( 'Cpt', 'init' ) ); register_deactivation_hook( __FILE__, array( 'Cpt', 'uninit' ) ); register_uninstall_hook( __FILE__, array( 'Cpt', 'uninit' ) ); global $wpdb; class Cpt { CONST TABLE = 'cpt'; /** * Constructor */ public function init() { /** * Creation table for cpt */ $sql = "CREATE TABLE IF NOT EXISTS `" . self::TABLE . "` ( id mediumint(9) NOT NULL AUTO_INCREMENT, time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, name tinytext NOT NULL, UNIQUE KEY id (id) );"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); $wpdb->query($sql); self::convert_to('post', 'custom'); } public function uninit() { /** * Delete table for cpt */ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); //$wpdb->query("DROP TABLE IF EXISTS `cpt`;"); //$this->delete_cpt("Custom post 1"); } /** * Add a custom post type */ public function add_cpt($name) { /** * Add a single data */ $time = (string)date('dmY'); require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); $wpdb->insert( self::TABLE, array( 'time'=>$time, 'name'=>$name ) ); /*$wpdb->show_errors(); echo $wpdb->last_query; die();*/ } /** * Delete a custom post type */ public function delete_cpt($name) { /** * delete a single data */ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); $wpdb->delete( self::TABLE, array( 'name'=>$name ) ); $wpdb->show_errors(); echo $wpdb->last_query; die(); } /** * Get all custom post types */ public static function get_ctps() { /** * delete a single data */ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); $custom_posts = $wpdb->get_results( 'SELECT * FROM ' . self::TABLE . '', OBJECT_K ); $wpdb->show_errors(); echo $wpdb->last_query; return $custom_posts; } /** * Get a single custom post type */ public function get_ctp($name) { /** * get a single data */ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); $custom_post = $wpdb->get_results( 'SELECT name FROM ' . self::TABLE . ' WHERE name = $name', OBJECT_K ); $wpdb->show_errors(); echo $wpdb->last_query; print_r($custom_post); //return $custom_post; } /** * Post type conversion */ public static function convert_to($from, $to) { // Get the posts of the type $from require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); $wpdb->update( 'wp_posts', array('post_type'=>$to), array('post_type'=>$from) ); $wpdb->show_errors(); echo $wpdb->last_query; } /** * Generate admin menu with all custom post types */ public function generate_menu() { $custom_posts = self::get_ctps(); } } 

Нет, и на самом деле вы не должны включать файл wp-admin / includes / upgrade.php в плагин. Для этого нет реального действительного варианта использования. Он ничего не делает для вас или не добавляет каких-либо полезных функций для плагина.

Что касается вашего вопроса, вы говорите: «Это не работает», но вы не можете определить, что это значит. Предоставление сообщений об ошибках полезно, когда вы задаете вопросы.

Я отмечаю, что в ряде функций вы пытаетесь вызвать функциональность в $ wpdb без объявления global $wpdb; первый. Попробуйте вместо этого заменить require_once.

В контексте вашего кода включение не имеет смысла, но, чтобы ответить на ваш вопрос по-другому, update.php – это файл, который определяет функцию dbDelta (), которая может быть использована для обновления таблицы MySQL, если она уже существует. Этот механизм пригодится при обновлении плагина до версии, которая использует разные таблицы MySQL без потери данных.

Здесь указывается способ создания настраиваемой таблицы MySQL при установке плагина:
source: Codex – Создание таблиц с плагинами

Следующим шагом будет создание таблицы базы данных. Вместо непосредственного выполнения SQL-запроса мы будем использовать функцию dbDelta в wp-admin / includes / upgrade.php (нам придется загрузить этот файл, поскольку он по умолчанию не загружен). Функция dbDelta анализирует текущую структуру таблицы, сравнивает ее с желаемой структурой таблицы и добавляет или изменяет таблицу по мере необходимости, поэтому она может быть очень удобной для обновлений (см. Wp-admin / upgrade-schema.php для получения дополнительных примеров как использовать dbDelta)

Таким образом, вы можете захотеть использовать метод query () в пользу функции dbDelta (), сохраняя включение файла.