Създайте свои собствени таблици в базата данни на WordPress - WP списание
Начало → Разни → Създайте свои собствени таблици в базата данни на WordPress
Но на практика това не винаги е оптимална, а понякога е необходимо да се създадат своя собствена маса в базата данни на WordPress. С този подход, има очевидни недостатъци:
- WP_Query не може да се използва за достъп до данните
- Данните в таблицата не използва всеки обект кеширане
- Потребителският интерфейс за работа с данните, необходими за изграждане на собствените си
- Роли, привилегии, и изходните шаблони Permalink формати също трябва да вземат
- Не можете да използвате WordPress таксономия за групиране на данни
Там със сигурност е един плюс, който често оправдава използването на собствените си маси в WordPress: ние трябва да се определи структурата, типове данни и показатели. И когато се работи с големи обеми от данни, тя може значително да повлияе на скоростта на сайта.
функция dbDelta ()
Застроена функция dbDelta () ви позволява да създадете таблица в базата данни на WordPress, както и да се направят промени в тяхната структура. Но преди да се създаде нова таблица, трябва да вземе решение за неговото име и кодиране.
Името на новата таблица трябва да има същия префикс, който се използва от ядрото на WordPress (по подразбиране wp_) и допълнителен префикс за нашия плъгин или проект, например: wp_my_table_name. Wp_ префикс може да бъде получена от () метод get_blog_prefix на световната обект $ wpdb. и използване на набор от знаци Collate свойства и може да се използва за определяне на кодиране:
На следващо място, с помощта на функцията dbDelta () можем да създадем нова таблица:
dbDelta () функция е различен от един прост въпрос MySQL в базата данни на WordPress. Тя разделя структурата на таблицата на части, и го сравнява с таблицата, която вече съществува. Това позволява dbDelta (), за да се направят промени в структурата на масата, без да е необходимо да изтриете и да създадете таблицата отново.
Например, за да добавите нова колона масата ни, ние можем да променим нашата обикновена заявка Създаване на таблица следва:
В този случай, се е разпаднала на запитването на парчета, dbDelta () функция ще признае, че добавя нов цвят колона. и изпълнение на съответната таблица заявката ALTER на съществуваща таблица в базата данни на WordPress. За да се провери, че го е направил функция можем да извлечем от резултата dbDelta, например с помощта на var_dump ().
Такова поведение функция dbDelta () позволява да се използват повторно за същата таблица, но имайте предвид, че всеки път, когато ти се обадя dbDelta () тя ще сверки с базата данни, за да се получи желаната структура на масата, така че да изпълнява dbDelta () на всяка страница натоварване - не е оптимално.
маси и версия dbDelta ()
В този плъгин може да се уточни на текущата версия на схемата на базата данни и го актуализира, само когато наистина се промени схемата собствената си маса. И когато ъпгрейд схема с помощта dbDelta (), можем да запише версия на WordPress възможности за подобен актуализацията не повече от веднъж.
По този начин, по време на събитието в първоначален, нашите сменяеми проверки инсталираната версия на схемата на базата данни в опциите на WordPress.
Ако инсталираната версия не е налице или е по-малко от сегашната версия, която наричаме начин на надстройване () приставката ни, която може да се използва функция dbDelta (), за да се актуализира схемата на базата данни, и в крайна сметка възможностите за надграждане, в WordPress.
При този подход, след смяната на структурата на данните в искането за dbDelta (), ние трябва само да се увеличи клас променлива $ db_version на.
Режимът на Многосайтово, кода по-горе ще работи за всеки сайт в мрежата отделно, т.е. Всеки обект ще има своя собствена маса WP _ * _ my_products. В повечето случаи, това е точно това, което планира предприемача.
Въпреки това, понякога ние трябва да се създаде така наречената "глобален" таблица, която ще бъде единственият в цялата мрежа. В този случай, трябва да бъдат направени нашите две малки промени:
- Посочете 0 в get_blog_prefix на повикване (). да се използва в световен префикс WordPress база данни.
- Използвайте get_site_option () и update_site_option () за съхраняване на данни схема версия само в основния сайт в мрежата.
Както споменахме по-рано в тази статия, за да изтеглите данни от новата ни маса, не можем да използваме WP_Query клас или други функции за поддръжка на WordPress. Запитвания ще бъдат изградени и управлявани ръчно с помощта на обект $ wpdb на:
Тази функция ще се върне продукта с определен идентификатор в базата данни. Имайте предвид, че при повторно наричаме същите функции с един и същи идентификатор, той отново се изпълни заявка към база MySQL база данни. За да избегнете това, можете да използвате кеширани обекти в WordPress.
Ние също трябва да се обърне внимание на начина на подготвим () обект $ wpdb. Тя ви позволява да се определи форматът на комуникационните променливи в базата данни на WordPress и в повечето случаи предпазва от SQL-инжекция.
Това е всичко, добре, но е възможно по някакъв начин да се направи връзка с техните маси WP_Query, или има абстрактен клас, който може да се направи обвивка на WP_Query подобие на свои собствени таблици?
За съжаление не WP_Query проектиран да работи с външни маси, така че просто не се окаже, да го свържат с таблиците си, особено след като произволни маси често са създадени с различна структура.
Най-сигурният вариант е да създадете свой собствен клас, използвайки като основа WP_Query. Пример за това е в WordPress ядро (WP_Comment_Query, WP_User_Query) и продукти на трети страни, като например в SP_Query SupportPress.
Ако вашата маса е с мета-данни със същата структура като postmeta, usermeta и commentmeta, можете да използвате стандартните функции за достъп до get_metadata мета-данни () и т.н. и WP_Meta_Query клас. За да направите това, вашата маса с мета-данни трябва да бъдат декларирани в обект $ wpdb и функцията на разположение _get_meta_table () на. Още в WP-включва / meta.php.
Все още е възможно да се отбележи една интересна функция, която е трудно да се изпусне в ръководството, може би си струва няколко часа търсене грешка:
Трябва да имате две пространства между думите първичен ключ и определянето на основния си ключ.