Перенос базы данных WordPress Общее описание базы данных


Оглавление (нажмите, чтобы открыть):

Как правильно перенести WordPress

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

Создаём резервную копию файлов сайта

Для создания бекапа (резервной копии) сайта на WordPress можно пойти несколькими путями

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

Ещё хочу добавить про плагины — они могут не до конца запаковать все файлы. Я, например, сталкивался с тем, что UpdraftPlus WordPress Backup Plugin не до конца сбекапил базу данных, пропустив кастомную таблицу (у неё префикс отличался от остальных). Поэтому, при переносе базы данных я рекомендую пользоваться старыми добрыми phpMyAdmin или Adminer.

Во втором случае, если ваш хостер предоставляет панель управления, в ней, наверняка, есть менеджер файлов. Тогда самым простым будет воспользоваться им для создания бекапа файлов сайта. Думаю, тут вы тоже сможете разобраться самостоятельно. Или, в крайнем случае, обратитесь за помощью в службу поддержки.

Кстати, вот тут моя личная рекомендация. Если заведёте хостинг в Beget, служба поддержки перенесёт и настроит ваш сайт бесплатно, а также даст 30 бесплатных тестовых дней хостинга

Если панели нет, либо вы имеете желание и возможность работать через консоль, переходим далее.

Как создать архив с файлами сайта

Во втором случае, допустим, ваш сайт располагается в директории /var/www/sheensay.ru
Авторизуетесь в вашем хостинге с помощью Far Manager или иного другого файлового или консольного менеджера (например, putty) по ssh, переходите в раздел /var/www/ вводите команду

где sheensay.ru — это директория, в которой содержится ваш сайт.
В результате, увидите файл backup.tag.gz . Его надо скачать, в нём содержится архив файлов вашего сайта

Создаём бекап файлов WordPress

Также, хорошие хостеры позволяют создавать архивы с бекапами сайтов прямо из панели управления, вы можете уточнить про эту возможность в службе технической поддержки.

На худой конец, просто скопируйте файлы сайта к себе через ftp или ssh, однако, этот вариант крайне неудобен и нежелателен, ибо долог.

Создаём резервную копию базы данных сайта

Для создания бекапа mysql базы данных можно

  1. Воспользоваться плагинами: WP-DB-Backup, WP Database Backup и т.д.
  2. Использовать phpMyAdmin, Adminer
  3. Создать копию базы данных mysql через консоль утилитой mysqldump

Первый случай также не рассматриваю, ибо не пользуюсь. Если нужен обзор — напишите в комментариях.

Как создать резервную копию базы данных с помощью PhpMyAdmin, Adminer

Во втором случае, который я, кстати, рекомендую как самый удобный, вы просто авторизуетесь в PhpMyAdmin и создаёте дамп базы данных

Авторизуемся в phpmyadmin

Параметры настроек экспорта базы данных

  1. Находим нашу базу данных
  2. Переходим в Экспорт
  3. Выбираем режим Обычный — отображать все возможные настройки
  4. Убеждаемся, что все таблицы выделены
  5. Выбираем компрессию gzip
  6. Следим, чтобы формат был SQL
  7. Смотрим, чтобы все галочки были проставлены как надо

Параметры настроек экспорта базы данных

На выходе на скачивание получаем файл wptest.sql.gz , где wptest — название нашей базы данных.

Создание копии базы данных с помощью mysqldump

Если у вас нет доступа к phpMyAdmin, вы можете создать дамп базы данных через консоль SSH с помощью утилиты mysqldump.
Допустим, для доступа к базе данных у нас такие параметры: логин: root , пароль: pass , название базы данных sheensay_database .
Авторизуемся на хостинг через ssh и в консоль записываем

На выходе получится файл db.sql.gz , в котором содержится дамп(упакованный бекап) базы данных

Дамп базы данных

Можно упростить создание бекапа базы данных, если использовать WP CLI
Для создания бекапа достаточно 1 команды (если под рутом, добавляете ключ —allow-root ):

А чтобы развернуть дамп из бекапа, можно использовать похожую команду:

где db.sql — имя дампа базы данных.

Сжать db.sql можно комадной:

А распаковать обратно:

Перенос с локального сервера на хостинг

Итак, мы имеем 2 файла с бекапами нашего сайта: backup.tar.gz — с файлами сайта, и wptest.tar.gz — с дампом базы данных. Если мы будем переносить наш сайт с денвера (или иного локального сервера) на хостинг, по сути, ничего не поменяется, разве что архив с файлами сайта нужно будет собрать штатным архиватором (тот же Far Manager с помощью Shift + F1 на нужной папке с файлами прекрасно с этим справляется). Так же можно перенести сайт обратно на Денвер или любой другой хостинг, поэтому направление переноса не имеет значения.

На локальном хостинге (Денвере/Denwer, Open Server) не забывайте отключать плагины кеширования (WP Super Cache, W3 Total Cache, WP Rocket и подобные) и безопасности (Wordfence, All In One WP Security & Firewall и т.п.), они будут мешать работе. Если не получается отключить плагины через админку, удалите их директории вручную, это хоть и грубый, но весьма действенный метод.

Перенос файлов сайта

Для начала, перенесём файлы сайта. Если возможно, делаем это с помощью файлового менеджера: авторизуемся по ssh и закачиваем backup.tar.gz в нужную директорию.

Архив с файлами сайта нужно залить именно на тот уровень иерархии, с которого он создавался. В нашем случае, нужно заливать в /var/www/
Впрочем, при возникновении трудностей для исправления ситуации можно воспользоваться UNIX-командой mv

Распаковку производим с помощью команды

Если у вас VDS/VPS, после переноса файлов не забудьте установить правильных владельцев файлов и директорий, а также права доступа к ним.

Перенос базы данных

Теперь переходим в phpMyAdmin нового хостинга и импортируем дамп нашей базы данных

База данных на новом хостинге должна уже существовать и быть пустой, то есть готовой для принятия нашего дампа

Импортируем дамп базы данных

  1. Авторизуемся в phpmyadmin
  2. Переходим в раздел импорт
  3. Выбираем архив с дампом БД
  4. Следим, чтобы кодировка была правильной
  5. Формат должен быть SQL
  6. Сохраняем

Всё, импорт на этом почти завершён. Осталось подключить сайт к базе данных.
Для этого находим в корне сайта файл wp-config.php и записываем туда данные, предоставленные хостингом

Настройка подключения к базе данных

Как изменить адрес WordPress

Если во время переноса WordPress вам понадобится изменить домен, не лезьте в базу данных менять что-либо вручную, так как есть риск переломать сериализованные строки.
Лучше воспользуйтесь одним из нижеперечисленных вариантов:

Самый простой вариант — прописать домен в wp-config.php Способ не идеальный (иногда некоторые плагины могут работают некорректно, пока не изменить домен и в базе данных тоже), но самый простой и быстрый.
Итак, находим в корне сайта, редактируем wp-config.php . Желательно найти define( ‘WP_DEBUG’, false ); и прописать над или под ним:

Вариант для любителей консоли SSH — пользуемся WP-CLI Для безопасного внесения изменений в базу данных WordPress можно воспользоваться утилитой WP-CLI.
Например, команда для консоли SSH, чтобы изменить домен в базе данных с http на https:

Специальная утилита Search-Replace-DB для внесения изменений в базу данных WordPress

Пользуемся специальной утилитой Search-Replace-DB от компании Interconnect IT, это проще и безопаснее. Вам будет достаточно лишь доступа по SSH или FTP, и она сможет внести изменения в сериализованные значения правильно (инструкция ниже).

Используем Search-Replace-DB

  1. Скачиваем последнюю версию Search-Replace-DB
  2. Создаём в корне сайта папку с любым названием, распаковываем скачанный архив туда. Тут загвоздка в том, что любой открывший эту директорию получает доступ к базе данных сайта. Поэтому тут либо создаём сложноподбираемое название директории, либо воспользуемся защитой htaccess от постороннего доступа

Как правильно изменить адрес WordPress


Как правильно изменить адрес WordPress

В строку replace вносим старый домен, with — новый. Данные для подключения к базе данных вносятся автоматом.
Отмечаем All tables , потом жмём Live Run .

Не закрывайте страницу, пока утилита не завершит все начатые изменения!

Утилитой можно воспользоваться не только для изменения имени домена в базе данных. Она может помочь при внесении других правок, при необходимости, сделав это аккуратно и сохранив структуру данных.
По окончанию работ директорию со скриптами лучше всего удалить для безопасности. Советую удалять не с помощью кнопки delete me , а вручную через FTP или SSH.

Как сделать 301 редирект со старого домена на новый

Допустим, сайт перенесён с домена example.org на example.com

В .htaccess в корне сайта прописываем:

А вот пример, когда к смене домена добавляется переезд с http на https:

Что Такое База Данных в WordPress: Всё, Что Вам Нужно Знать

В базе данных WordPress хранятся все необходимые данные сайта. Не только основная информация, такая как имена пользователей и пароли, но и сообщения, страницы и комментарии, даже тема веб-сайта и параметры конфигурации WordPress. Сегодня мы рассмотрим, что такое база данных, почему и как вам следует управлять базой данных WordPress. Пристегнитесь и наслаждайтесь поездкой.

Почему WordPress нужна база данных

Давайте сначала разберёмся, что такое база данных. Как кратко говорилось ранее, база данных может быть жизненно важным вариантом для нас, чтобы хранить и извлекать ценные данные.

База данных это структурированный набор организованных данных. В области ИТ под системами управления базами данных (СУБД) понимается программное обеспечение, которое взаимодействует с пользователем, обрабатывает данные, а также извлекает и хранит данные. Это почти то же самое, когда вы сохраняете изображения или видео на жёстком диске вашего компьютера или в папке для визитных карточек, если вы предпочитаете управление старой школы. Наличие личной базы данных для доступа к этим данным очень полезно.

Есть несколько способов использования и доступа к базе данных. WordPress использует MySQL для своей системы управления базами данных. MySQL — это программное обеспечение с открытым исходным кодом, и оно отвечает за управление такими компонентами базы данных WordPress, как пользовательские данные, пользовательские мета, публикации, комментарии и так далее. Мы обсудим это чуть позже.

WordPress использует PHP, используя SQL-запрос в разметке PHP, в качестве языка инструкций для CRUD (Create, Read, Update, and Delete — создай, прочти, обнови и удали) данных из базы данных MySQL. База данных является неотъемлемой частью WordPress. Это основа, которая хранит всю основную информацию. База данных также обеспечивает бесперебойную работу вашей страницы, полностью оптимизирует её и помогает регулярно выполнять резервное копирование данных.

Следующий вопрос, где хранится база данных?

Что такое хост базы данных?

Ваша база данных WordPress размещается на хосте базы данных, который затем помещает её на сервер MySQL. Думайте о хосте базы данных как о реальном доме, который вы можете найти зная определённый адрес (имя хоста). Вы можете получить что-то из раздела “комнаты” (имя базы данных). Конечно, вам понадобится разрешение на это, поэтому вам нужно ввести имя пользователя и пароль перед входом в дом.

По большей части вы можете использовать localhost для управления и подключения WordPress к вашей базе данных. Однако вы также можете управлять сервером MySQL, если ваш веб-хостинг использует другое имя хоста. Например, в Hostinger вы можете получить доступ к своей базе данных MySQL в разделе База данных с панели управления.

Что такое таблица базы данных?

В базе данных ваши данные хранятся в виде таблиц. Каждая таблица состоит из уникальных данных и отображается в строках. И строки также содержат другие части информации или параметры. По умолчанию WordPress автоматически создает эти таблицы при первой настройке веб-сайта. Версия WordPress 4.4 сделает следующие основные таблицы базы данных:

  1. wp commentmeta — каждый комментарий имеет уникальную информацию, называемую метаданными, эти данные будут доступны в этом разделе.
  2. wp comments — все комментарии в WordPress будут доступны в этой таблице.
  3. wp links — этот раздел содержит информацию, относящуюся к ссылкам, введённым в функцию Links в WordPress.
  4. wp options — этот раздел содержит данные, которые WordPress использует для хранения различных настроек и параметров конфигурации.
  5. wp postmeta — каждый пост содержит уникальную информацию, называемую метаданными, эти данные будут доступны в этом разделе.
  6. wp posts — в WordPress “posts” — это статьи, которые вы пишете для заполнения своего блога. Этот раздел будет хранить эти данные. Страницы и пункты меню навигации также хранятся здесь.
  7. wp termmeta — каждый термин имеет уникальную информацию, называемую метаданными, эти данные будут доступны в этом разделе.
  8. wp terms — здесь хранятся категории для сообщений и ссылок, а также теги для сообщений.
  9. wp term relationships — сообщения связаны с категориями и тегами из таблицы wp_terms, и эта связь поддерживается здесь.
  10. wp term taxonomy — в этой таблице описывается таксономия (категория, ссылка или тег) для записей в таблице wp_terms.
  11. wp usermeta — у каждого пользователя есть уникальная информация, называемая метаданными, эти данные будут доступны в этом разделе.
  12. wp users — здесь поддерживается список пользователей.

По умолчанию вы не можете удалить основные таблицы WordPress. Но они добавятся к вашему контенту. Узнать больше о таблицах можно тут.

В Hostinger мы всегда думаем о наших пользователях в первую очередь. Мы подумали, что вы захотите узнать о лучших предложениях веб-хостинга на рынке.

Если вы собираетесь начать что-то новое, получите наш специальный купон на скидку и выходите в интернет прямо сейчас!

Перенос базы данных WordPress на новый хостинг

В процессе перемещения WordPress сайта с одного хостинга на другой, проводя тестирование на новом домене, я понял, что некоторые участки нового сайта по-прежнему ссылаются на старый сайт. Существует множество инструментальных средств, позволяющих сделать резервную копию сайта, базы данных и записей. Мне требовалось что-то, что позволило бы изменить все пути на своем сайте. Что-то очень простое и быстрое. В процессе поиска я наткнулся на удобный плагин WP Migrate DB. Он работает на лайв-хосте, оказывается полезным при разработке приложений с использованием XAMPP и идеально подходит для других локальных ситуаций. По своей сути, WP Migrate DB выполняет поиск/замену полей в вашей базе данных и затем экспортирует ее в виде SQL файла.

Давайте начнем с самых азов.

Установка плагина

Для начала нам понадобится скачать и установить плагин WP Migrate DB. Инструменты, предназначенные для резервного копирования данных, найти легко, а вот для миграции – гораздо сложнее. Поиск плагина можно произвести как вручную, так и воспользовавшись бэкэндом WordPress. Мы не будем заострять на этом свое внимание.

Эскпорт базы данных

После активации плагина переходим в раздел Tools > WP Migrate DB.

Здесь мы видим четыре поля: текущий адрес, новый адрес, текущий путь к файлам и новый путь к файлам. Первые два параметра, надеюсь, объяснять не требуется; вторые два – это путь к вашему серверу. Если вы не знаете пути к своему серверу, можно создать информационный PHP файл. В этот файл необходимо добавить инструкцию , сохранить его, загрузить в папку на хостинге и затем вызвать (site.com/phpinfo.php). В переменной SCRIPT_FILENAME будет находиться путь к вашему серверу.

Как только вы заполните все необходимые поля, щелкните по кнопке “export database”, и вы получите готовый SQL файл.

Импорт базы данных

На новом сайте пройдите в phpMyAdmin, выберите базу данных, которая относится к WordPress (или которую вы получите после импорта), перейдите в раздел “Import” и укажите SQL-файл, который вы загрузили.

Все готово! Помните, что это относится исключительно к базе данных. Удостоверьтесь в том, что ваши постоянные ссылки, перезаписанные через .htaccess, были сброшены (для этого вам, возможно, понадобится стереть .htaccess файл, установить постоянные ссылки по умолчанию и затем вернуться к требуемым настройкам). Если ваш корень был изменен и если у вас присутствуют CSS-файлы, обращающиеся к полному пути вашего старого хоста, вам понадобится отредактировать их вручную.

Как правильно перенести базу данных MySql WordPress?

Обычно переносил сайты на wordpress путем копирования файлов и дампа базы данных с заменой url в самой, бд и правкой wp-config. Но сейчас потребовалось один сайт перебросить на локальный сервер и поработать над ним, как при проделывании этих операций весь сайт поплыл, все блоки, слайдер отказался работать и пр.

Порывшись в гугле, нашел отличный скрипт для «правильной» правки бд: Safe Search and Replace on Database with Serialized . И вроде бы все должно было быть супер, но я никак не пойму что я упустил?

Скопировал файлы wordpress на OpenServer, поправил wp-config, бд не трогал, все как есть импортировал в новую бд, затем запустил скрипт и ввел замену url на локальный. После всех операций сайт все равно открывается по старым url из инета, а не на локалке. Подскажите где я туплю?

Необходимые SQL-запросы при переносе базы данных сайта на WordPress

Перечень SQL-запросов, необходимых для корректного переноса базы данных Вашего сайта на WordPress.

Для нормального функционирования базы MySQL нашего сайта на новом месте (домене, хостинге и т.д.) нам понадобиться выполнить всего три основных запроса.

Специально для нетерпеливых сначала код, после — описание:

Итак, для корректного выполнения SQL-запросов Вам необходимо будет заменить следующие участки запросов:
wp_ — префикс таблиц базы данных WordPress на те, которые указаны у вас;
http://test.migo.com.ua — на ваш старый домен;
http://migo.com.ua — на ваш новый домен;

Для выполнения запросов, необходимо находясь в phpMyAdmin выбрать нужную нам базу данных, в ней перейти на вкладку «SQL» и вставить выше указаные запросы (предварительно откорректировав «под себя») в поле запросов, после чего нажать ОК.

По окончании обработки — появится сообщение об удачном выполнении запросов.

На этом все. База данных готова для работы на новом месте.

Руководство для начинающих по базе данных WordPress

Опубликовано: ADv Дата 29.01.2014 в рубрике WP для начинающих 2 комментария

WordPress написан с использованием PHP в качестве скриптового языка, и MySQL в качестве системы управления базой данных. Для того, чтобы использовать WordPress, вам не обязательно изучать ни один из них. Однако, базовое понимание PHP и MySQL может помочь вам в решении проблем, а также более четко понимать как работает WordPress. В этой статье мы расскажем как WordPress использует базу данных, а также поясним значение основных таблиц в базе данных WordPress. Также мы покажем как управлять базой данных WordPress с помощью phpMyAdmin.

Как WordPress использует Базы Данных

WordPress использует PHP (язык программирования) для сохранения и извлечения данных в базу данных. Информация, хранимая в БД WordPress, содержит: записи, страницы, комментарии, рубрики, теги, произвольные поля, пользователей и другие настройки сайта, как например URL сайта и т.д. Подробнее остановимся на этом при описании каждой таблицы в базе ВП.

При первой установке WordPress, он запрашивает у вас имя базы данных, хост, имя пользователя и пароль. Эта информация сохраняет в конфигурационном файле (wp-config.php).

Во время установки WordPress использует информацию, которую вы указали о базе данных для создания таблиц, и сохраняет в нее параметры по-умолчанию для сайта. После установки WordPress выполняет запросы к этой базе данных для динамической генерации HTML страниц вашего блога. Именно это делает WordPress исключительно мощным, потому как вам не нужно создавать новый файл .html для каждой страницы, которую вы захотите добавить. WordPress обрабатывает всё «на лету».

Вникаем в суть таблиц БД WordPress

Каждая новая установка WordPress создает 11 стандартных таблиц в базе данных. Каждая таблица содержит данные для различных разделов, фичи и функционал движка WordPress. Взглянув на структуру этих таблиц, вы можете с легкостью понять где сохраняются различные «части» вашего сайта. На сегодняшний день дефолтная установка WordPress создает следующие таблицы:

Примечание: wp_ перед каждым именем таблицы является префиксом БД, который вы выбираете при установве. Он может отличаться от вашего.

wp_commentmeta : Эта таблица содержит мета информацию о комментариях, опубликованных на сайте WordPress. В этой таблице есть четыре поля: meta_id, comment_id, meta_key, и meta_value. Каждый meta_id привязывается к comment_id. Примером мета информации комментариев может быть статус комментария (Ожидающие, Одобренные, Спам, В корзине и т.д.)

wp_comments : По названию таблицы можно понять, что она содержит в себе сами комментарии вашего WordPress, и включает в себя имя автора комментария, ссылку на сайт, электронный почтовый ящик, текст комментария и т.д.

wp_links : Для блока ссылок в ранних версиях WordPress или плагина Link Manager.

wp_options : Эта таблица содержит большинство основных настроек сайта: URL сайта, email администратора, стандартные рубрики, количество записей на странице, формат даты и многое другое. Также эта таблица используется многими плагинами для сохранения их настроек.

wp_postmeta : Эта таблица содержит мета информацию о ваших записях, страницах и произвольных типах записей в WordPress. Примером мета информации записей может быть шаблон, используемый для конкретной страницы, произвольные поля и т.д. Некоторые плагины также используют эту таблицу для хранения данных, например SEO информацию.

wp_posts : Имя таблицы говорит, что здесь находятся записи, однако на самом деле таблица содержит все типы записей, или, правильней будет сказать, все типы контента. В ней содержатся все ваши записи блога, страницы, ревизии и произвольные типы записей.

wp_terms : В WordPress есть мощная система таксономий, которая позволяет организовывать ваш контент. Отдельные элементы таксономий называются термы (terms) и они хранятся в этой таблице. Например, ваши рубрики и теги в WordPress — это таксономии, а каждая рубрика и тег внутри — терм.

wp_term_relationships : Эта таблица управляет взаимосвязями типов записей с термами в таблице wp_terms. Например, эта таблица помогает WordPress определить, что запись X находится в категории Y.

wp_term_taxonomy : Эта таблица определяет таксономии для термов в таблице wp_terms. Например, если у вас есть терм “WordPress Tutorials“, тогда в этой таблице будут содержаться данные, которые скажут о том, что он ассоциирован с таксономией рубрик. Вкратце, эта таблица содержит данные, которые позволяют WordPress определиться, какой терм является рубрикой, а какой тегом и т.д.

wp_usermeta : Содержит мета информацию о пользователях на вашем сайте.

wp_users : Содержит информацию о пользователях, такую как имя пользователя, пароль, емейл пользователя и т.д.

Управление базой данных WordPress с помощью phpMyAdmin

phpMyAdmin — это open source ПО, которое предоставляет графический веб-интерфейс для управления вашей базой mySQL. У большинства хостинг-провайдеров phpMyAdmin можно найти в панели управления хостингом, что позволяет пользователям быстро получить доступ к базе данных и выполнять операции с ней. Выглядит phpMyAdmin приблизительно следующим образом:

Клик на Databases отобразит вам список всех доступных либо созданных вами баз данных. Выбираем свою БД WordPress, после чего видим список всех таблиц WordPress.

Здесь вы можете выполнять различные операции, такие как поиск/замена определенного слова в ваших записях, восстановление БД, ее оптимизация, добавление новых администраторов, деактивация всех плагинов, изменение паролей и прочее.


Примечание: Прежде чем что-либо изменять, обязательно сделайте резервную копию базы данных! Кнопки «Отмена» здесь нет. Поэтому просто сделайте бекап.

Руководство по Базе Данных WordPress: оптимизация и резервное копирование

Знаете вы или нет, но для установки, извлечения и отображения данных на WordPress используется база данных MySQL. Она является самой важной частью CMS, и для того, чтоб облегчить процесс понимания всех нюансов, связанных с их управлением, WordPress разработал очень простой и эффективный подход.

Так, есть несколько способов доступа к данным прямо с сайта. И все же, чтобы разобраться, как все это работает, необходимо ознакомиться с самой базой данных WordPress.

Понимание ее структуры может помочь в решении многих проблем с сайтом. Без доступа к его панели управления можно легко изменить пароль, деактивировать плагин, выбрать тему и осуществить много других действий прямо с базы данных.

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

Все начинается с файла wp-config.php

При установке WordPress необходимо ввести информацию базы данных либо при редактировании файла wp-config.php вручную, либо во время установки. На деле это выглядит так:

Строки с именем пользователя и паролем объяснять не нужно. А вот в строке ‘ Database Charset is the character set to be used for creating tables ’, зачастую, не нужно менять utf8 на другой формат кодировки. Но если в будущем сайт будет мультиязычным, тогда можно.

С помощью префикса ‘ table ’ можно произвести несколько установок в одной базе данных. Например, префикс ‘ blog1_ ‘ для одной и ‘ blog2_ ’ – для другой.

Подсказка для безопасности: специалисты по системе безопасности WordPress рекомендуют все же менять стандартный префикс на любые другие комбинации букв, что поможет обезопасить базу данных от взлома хакерами.

Структура базы данных WordPress

После установки информации о БД в wp-config и ее запуска, WordPress автоматически создаст таблицы в базе данных с нужной информацией.

База данных будет выглядеть следующим образом:

Примечание: для управления базой данных используется приложение phpMyAdmin . Это веб-приложение есть в панели управления у большинства веб-хостингов. Некоторые из них, в основном, являются провайдерами выделенных серверов, и у них может не быть панели управления или приложения phpMyAdmin. В этом случае управление базой данных осуществляется с консоли MySQL.

Как видно, WordPress создал 11 таблиц. Их названия просты и понятны. Но все же мы о них немного поговорим.

Таблица для записей WP_POSTS

Любая созданная запись на сайте WordPress находится в этой таблице:

Таблица wp_posts содержит информацию о всех данных для создаваемых записей: автор, дата, контент, тип поста, прочее.

Многим пользователям часто непонятно, почему поле post_mime_type не содержит никакой информации. Дело в том, что оно заполняется только при наличии вложения post_type . Тогда в нем появится соответствующий тип файла: image/jpeg или application/pdf.

Таблица параметров WP_OPTIONS

Пожалуй, самая интересная таблица. Она содержит следующие поля:

  • option_ID
  • blog_ID
  • option_name
  • option_value
  • auto_load

Надо сказать, что в ней находится очень важная информацию о сайте: название, админская почта, активные плагин и темы. Эти параметры используются при потере доступа к админке сайта. Узнав об этих параметрах немного больше можно решить многие проблемы быстрее и безопаснее для сайта.

Не стоить забывать проводить регулярную чистку информации в этой таблице, ведь в нее добавляются параметры всех плагинов и тем. Как это сделать читайте ниже.

Таксономии и термины базы данных

WordPress использует три таблицы для управления таксономиями и пользовательскими таксономиями:

  • wp_terms
  • wp_term_taxonomy
  • wp_term_relationship

Для тех, кто еще толком не знаком с базой данных, это выглядит немного сложно. Но на самом деле, все довольно просто и понятно. Первая таблица wp_terms содержит все термины. Например, Blogroll, как и Uncategorized – это стандартные термины. Соответственно и все тэги, категории, навигационное меню и пользовательские такономии являются терминами и все они размещаются в этой таблице.

Таблица wp_term_taxonomy показывает к какой таксономии какой термин относится. Например, термин id 1 (Uncategorized) принадлежит к таксономии категории, а термин id 2 (Blogroll) – к категории ссылок.

В таблице wp_term_relationship все записи, ссылки и страницы относятся к термину с таблицы term_taxonomy . В этом случае запись может иметь несколько терминов в разных таксономиях.

Что представляет собой оптимизация базы данных?

После установки базы данных начинается создание оверхэдов, которые представляют собой память, занимаемую mysql в разных базах данных. Большое количество таких оверхэдов может повлиять на производительность базы данных. Но это очень просто решаемо, так как MySQL предоставляет запрос, который можно использовать в таблицах для их оптимизации:

Чтобы не играться с запросом вручную, можно оптимизировать таблицу через phpMyAdmin:

Либо же использовать плагины WP Optimize или WP DBManager , которые также предложат проводить регулярную чистку записей и удалять спамные комментарии, так как это очень влияет на функционирование базы данных.

К примеру, возьмем 1000 записей из блога, каждая из которых имеет 5 версий правок. Тогда база данных обрабатывает 5000 записей, что означает снижение ее производительности.

Еще один проблемный момент для базы данных – это данные, оставшиеся после давно не используемых плагинов. Некоторые из них могли создать свои собственные таблицы. Их можно спокойно удалить. Так же как и любую другую информацию в таблице wp_options.

Сброс базы данных

На этот случай можно использовать отличный плагин WordPress Database Reset , который автоматически очистит всю ненужную информацию в таблице WP_options, после чего можно использовать базу данных, как будто сразу после чистой установки WordPress, и устанавливать новые темы и плагины.

Резервное копирование базы данных

Необходимо производить резервное копирование данных всякий раз, когда на сайт вносятся какие-либо изменения. Это можно сделать с помощью phpMyAdmin: загрузить базу данных, кликнуть на кнопку «Check All», а затем «Export».

На следующей странице необходимо выбрать формат «SQL» и нажать «Go», после чего сохранить предлагаемый файл на свой компьютер.

Заключение

На самом деле, в работе с базой данных нет ничего сложного. Достаточно начать интересоваться этой темой, и так будет проще понять, что происходит с сайтом и как устранить возможные проблемы.

Источник: wplift.com

Насколько полезным был этот пост?

Нажмите на звезду, чтобы оценить этот пост!

Средний рейтинг: / 5. Количество голосов:

Пока нет голосов! Будьте первым, кто оценит этот пост.

100% правильный перенос сайта на WordPress на другой домен и хостинг

Нашел абсолютно проверенный и 100%-рабочий способ переезда сайтов под Вордпресс на другой домен или хостинг. Все можно сделать быстро, а главное — правильно!

Обычно я переношу сайты WordPress CMS на другой хостинг довольно часто — по 20 раз в месяц (такая работа!). И мне всегда казалось, что я все делаю правильно: ну перенес файлы, перенес базу данных, поменял имя сайта в файлах и базе – и вуаля!

Но не так все просто. Как-то после очередного переезда у меня напрочь перестали работать виджеты — сайт отображался криво.

Я погуглил и нашёл причину – недостаточно просто перенести сайт, нужно еще и правильно поменять его имя с учетом синтаксиса современных баз данных. И я решил поделиться своим способом переноса Вордпресса на новый домен и хостинг и со своими читателями.

Плагины после переноса WordPress не заработали

Раньше я действовал так: ставил плагин Xcloner, копировал с его помощью сайт в виде архива (там внутри была и база), затем переносил и устанавливал на новый хостинг или домен.

Но даже с помощью этого, казалось бы проверенного способа, несколько моих последних сайтов некорректно перенеслись, когда я их устанавливал клиентам на хостинг.

В чем же дело?
Я подумал сразу, что видимо дело в плагине Xcloner.
Перепробовал еще штук 5 разных плагинов, вроде бесплатного Duplicator и платного BackUp Buddy, и еще уже не помню всяких разных до кучи.

Везде была одна и та же проблема — сайт после переноса выглядел криво. Как бы не все элементы отображались, в первую очередь, виджеты.

Я плюнул на плагины и подумал: перенесу по старинке руками.

Переношу WordPress вручную

Как я уже писал в других статьях, современный сайт состоит обычно из двух «частей»: программные файлы и база данных со статьями, настройками и прочей информацией.

Поэтому в процессе переноса WordPress на другой домен и хостинг в ручном режиме обычно состоит из этих же двух этапов:

  1. Переносим файлы
  2. Переносим базу данных

Вручную это делается так.

Перенос файлов

Понятно, что перенести файлы можно несколькими способами. Раньше я это делал через FTP-протокол (читаем как работать по FTP тут). В этом случае я сначала копировал файлы на свой компьютер, затем открываю доступ ко второму хостингу — и туда уже переношу программные файлы WordPress.

По 3G-соединению это делать вообще не резон, даже с учетом того, что я как следует увеличил скорость подключения (читаем как я это сделал на мобильном интернете).

Поэтому я нашел более изящный способ.

Большинство моих клиентов использует панель хостинга — ISP Manager, там есть функции переноса целого архива прямо с одного хостинга на другой — минуя мой компьютер.

Так что теперь я делаю так: создаю архив всего сайта WordPress на своем хостинге и мгновенно переношу его на второй хостинг через ту же панель ISP.

Это занимает пару секунд и совсем не жрёт трафик.
Такой способ поддерживает еще несколько панелей управления хостингом (вот тут есть более подробная информация о том, какой хостинг я рекомендую).

Дальше остается только распаковать архив в директорию нового домена. Если не знаете, как создать домен и папку для него — то есть вы совсем еще зеленый в этой области — просто попросите хостера сделать это, я еще не встречал ни одного нормального хостера, кто бы отказал в этой просьбе своему клиенту.

Если нет возможности использовать ISP панель, то переносите по старинке через FTP.


Ну вот вы и перенесли файлы.
Нужно теперь поменять в файле конфигурации wp-config.php устаревшую информацию и указать новый домен, куда был перенесен wordpress-сайт.

Там все примитивно, разберетесь. Сохраняете после изменений wp-config.php и идем дальше.

Перенос базы данных

Если вы хотите быть уверенными на 200%, что все ваши статьи, записи и настройки скопируются полностью и правильно, то копируйте базу вручную прямо с сервера вашего хостера.

Для этого заходите в панель управления хостингом, выбирайте службу PhpMyAdmin (этот программа для управления базами данных), вводите логин и пароль от базы (есть в том же файле wp-config.php) и когда попадете внутрь – просто экспортируйте нужную базу, у вас получится один файл в формате SQL.

Я вот не знаю, нужно ли подробнее описывать процесс копирования базы данных? Если вы считаете, что нужно, напишите в комментариях, тогда я возможно, сделаю отдельную подробную статью по этому вопросу.

Теперь делаем на новом хостинге то же самое – заходим в PhpMyAdmin, вводим логин и пароль от свежей только что созданной базы данных и импортируем наш SQL-архив в нее.

Всё — теперь старая база данных находится на новом хостинге.

И теперь — самое главное.

Секретный момент!

Нюанс, о котором я не знал и из-за которого после переезда на новый хостинг и домен у меня некоторые сайты под WordPress сразу не заработали.

Современные базы данных хранят в некоторых местах не только информацию о домене сайта, например, «https://moytop.com», но также индексируют эту информацию, указывая в соседних полях, из скольких символов состоит строка с именем домена, например вот так:

s17 – означает, что в поле url – 17 символов.

И если вы просто поменяете в редакторе один домен на другой, а количество символов не поменяете, то будут ошибки в домене и те же виджеты просто не станут работать.

И что? Сидеть с калькулятором и высчитывать длину новых доменов и строк? Наверняка можно это все автоматизировать и упростить.

Да, я это делаю вместе со специальным скриптом «Safe Search and Replace on Database with Serialized». Это реально волшебная программа, которая быстро и правильно делает замену старого домена на новый в базе данных при переносе сайта. При этом скрипт делает за вас всю нудную работу – высчитывает количество символов заменяемой строки и правильно добавляет их куда нужно в новую базу данных.

Чтобы запустить скрипт, достаточно его скачать на компьютер, затем по FTP переписать всю папку в корень вашего нового сайта и ввести путь к скрипту типа такого http://ваш сайт/database в любом браузере.

Скачать программу можно в интернете – она бесплатна, поищите в сети или можете скачать с моего сервера прямо сейчас через плагин социальных сетей.

Прямо сейчас вы можете скачать нужный файл с моего сервера — это просто и бесплатно. Достаточно кликнуть на любой значок соцсети, в которой вы, разумеется, имеете аккаунт и оставить сообщение в выбранной соцсети, после чего вам откроется скрытое содержимое.

Скачать файл

Все получилось успешно!

Распакуйте и следуйте инструкции по применению, рассказанной в этой статье.
Если вдруг возникнут сложности со скачиванием — напишите в комментариях.

Если на ваш емейл после подписки не приходит письмо для подтверждения уведомления (такое бывает иногда в зависимости от типа вашего ящика), то есть такие варианты:

  • Подождите минут 5-10.
  • Попробуйте другую почтовую сеть, лучше всего работают mail.yandex.ru или gmail.com.
  • Проверьте папку СПАМ — может нужное письмо именно там. После чего обязательно отметьте его и кликните — НЕ спам.
  • Если ничего не получилось, напишите мне в Контакты и укажите ссылку на страницу, версию браузера и примерный порядок действий.

Итак, установили и открыли скрипт? После запуска вы увидите примерно такой экран:

Программа работает именно с WordPress, поэтому логин и пароль к базе возьмет из конфигурации сама, всё что вам нужно – это вписать в первое поле имя старого домена (откуда переносится сайт), во второе поле – имя нового домена (куда переносим сайт) и нажать Live Run.

Процесс пошёл! Он нагляден, тут же показывается где и какие таблицы в базе содержали значение старого домена и все ли успешно поменялось.

Домены рекомендую вводить без префикса, то есть лучше не использовать http://test2.moytop.com, пишите просто: test2.moytop.com

Ну и в конце после замены информации о домене – можете удалить скрипт с сайта, так даже рекомендуют его авторы, чтобы он не был потенциальной дырой в безопасности сайта (читайте как повысить безопасность своего сайта на WordPress за пару кликов).

Все готово! Теперь перезагружайте страницу CTRL+F5 и если вы все сделали правильно и внимательно, то сайт перенесется на новый домен и хостинг без проблем.

И напоследок еще один суперпростой способ!

Мне его подсказал в комментариях Василий, за что ему отдельное спасибо

Для его реализации понадобится доступ в админку и плагин Velvet Blues Update URLs.

Этот плагин удобнее всего поставить еще до переноса Вордпресс-системы (как установить плагины для WordPress) и после переноса зайти в админку и выбрать в настройках нужные параметры.

Попасть в настройки:

Нужные параметры:

То есть в первом поле — старый адрес (лучше без http, просто домен).
Во втором — новый (аналогично).

Внизу я выбираю все галочки, чтобы поменять везде, где только можно.

Вот и все, дальше жмите — на кнопку UPDATES URLs и старые ссылки в базе заменятся на новые.

Этот способ переноса работает тоже хорошо, я проверил на нескольких сайтах — все четко.

И еще —

Несколько дополнительных советов по корректному переносу на другой хостинг:

  1. Проверьте, чтобы версия PHP была одинакова на старом и новом хостинге
  2. Проверьте, чтобы базы данных использовали полностью идентичную версию кодировки
  3. Воспользуйтесь услугой бесплатного переноса на новый хостинг от самого хостера! Вот тут я привожу хостеров, которых я уже проверил, и которые делаю бесплатный переезд сайтов к себе на хостинг.

Кстати, я не очень люблю переносить сайты вручную, поэтому сейчас приступаю к масштабному тестированию разных плагинов под WordPress именно для миграции на другой хостинг или домен. Пока все что я пробовал – не устраивали меня на 100%, в каждом был какой-то косяк.

Так что подписывайтесь на обновления, когда найду реально рабочий классный вариант — выложу на блоге.

Полезный совет: Как можно быстро добавить полезную статью в закладки своего браузера: просто нажмите на клавиатуре «CTRL + D» и кнопку «Готово», это работает в большинстве браузеров, проверьте сейчас!

wpdb<> WP 0.71

Позволяет производить любые операции с базой данных WordPress: вставлять, обновлять, получать или удалять данные.

WordPress предоставляет возможность удобно манипулировать своей базой данных за счет php класса wpdb .

php класс — относится к ООП (объектно-ориентированному программированию) и в традиционном своем понимании представляет собой полностью самодостаточный код, который должен выполнять определенную функцию. Например, в этом случае через класс wpdb мы может производить всевозможные операции с Базой Данных WordPress зная всего несколько «рычагов» управления классом, которые называются методами. Если говорить условно, то методы — это обычные php функции, только внутри класса.

Обращаться к методам класса wpdb нужно обязательно через глобальную переменную $wpdb (это экземпляр класса wpdb ). Также нужно помнить, что внутри обычных функций нужно обязательно глобализировать $wpdb , иначе она будет простой переменной внутри функции, делается это так:

C помощью методов $wpdb можно управлять произвольными таблицами в базе данных, не обязательно только теми, которые были созданы WordPress. Допустим, среди прочих таблиц WP, есть таблица newtable и нам нужно выбрать все поля id из нее. Реализовать это можно таким SQL запросом используя $wpdb:

Создавать свои таблицы рекомендуется с помощью функции dbDelta(). Или можно использовать обычный SQL запрос и метод $wpdb->query(‘CREATE TABLE . ‘); .

Для плагинов создание новых таблиц обычно вешается на хук активации плагина, см. register_activation_hook().

Создание отдельного подключения к базе данных

Нужно понимать, что один объект класса wpdb<> работает с одной БД — с текущей базой данных WordPress. Если нужно работать параллельно с какой-либо другой БД, то нужно создать еще один объект класса wpdb с указанием новых параметров соединения, отличных от тех что указаны в wp-config.php . Делается это так:

Для сложных соединений с несколькими БД (репликами), есть хороший плаглин, который рекомендуют разработчики WP — hyperdb. Этот плагин расширяет возможности базового класса wpdb. Устанавливается он не как обычный плагин и требует определенных знаний работы с базами данных (в противном случае, толку от этого плагина не будет).

А теперь, перейдем к разбору класса wpdb.

Хуки из класса
Возвращает

query — произвольный запрос к Базе Данных WordPress

Позволяет выполнять любые запросы к базе данных WordPress. В общем случае, она подразумевает выполнение не SELECT запросов, хотя и они могут также выполняться (но для них существуют $wpdb->get_results и другие функции см. ниже).

Возвращает

Число/false. Вернет количество строк, которые были задействованы в результате запроса (удалены/изменены/выбраны). Если запрос вызвал ошибку, то будет возвращено значение false.

query(строка) Запрос который нужно выполнить.

Имейте ввиду, что как и для всех функций класса wpdb, передаваемые параметры нужно очистить от SQL инъекций, сделать это можно двумя способами:

1) esc_sql( $user_entered_data_string ) .
2) $wpdb->prepare( ‘query’ , value_parameter[, value_parameter . ] ) .

Подробнее читайте в секции «Защита запросов от SQL инъекций». см. ниже.

Примеры

#1. Удалить произвольное поле ‘gargle’ и его значение у поста 13

#2. Установить родительскую страницу 7 для страницы 15

#3. Удалить осиротевшие произвольные поля

#4. Изменим ключ у полей-повторителей ACF

get_var — получение определенной ячейки таблицы


Получает значение первой колонки и первой строки из результата запроса.

Чтобы получить значение второй ячейки из второй строки результата, используйте второй и третий параметры: $column_offset = 1 , $row_offset = 1 .

Возвращает

Значение колонки: число, строку, дату и т.д.

  • Если запрос получает значение одной колонки, то функция вернет это значение (без всяких массивов).
  • Если запрос получает одну строку и несколько колонок, то функция вернет значение первой колонки (ячейки).
  • Если запрос получает несколько строк и колонок, то вернется значение первой строки первой колонки.
  • Вернет NULL, если результата нет.

query(строка) Запрос который нужно выполнить. Можно установить этот параметр в значение null , тогда функция вернет результат последнего запроса, который был выполнен классом (сохранился в переменной). column_offset(число) Нужная колонка (отступ по колонкам). по умолчанию 0 — первая колонка. row_offset(число) Нужная строка (отступ по строкам). по умолчанию 0 — первая строка.

Примеры

#1. Выведем на экран количество пользователей

#2. Выведем на экран сумму значений определенных произвольных полей

#3. Набор выводов статистики блога

get_row — выбор строки таблицы

Получает одну строку таблицы в виде объекта. Если результат запроса содержит больше одной строки, то функция получит только первую строку результата. Чтобы получить вторую строку из запроса, укажите параметр $row_offset = 1 .

Возвращает

Объект/массив/null. Вернет null, если не удалось получить данные (запрашиваемых данных нет в бд).

query(строка) Запрос который нужно выполнить. output_type

Одна из трех констант. Может быть:

  • OBJECT — результат будет возвращен в виде объекта.
  • ARRAY_A — результат будет возвращен в виде ассоциативного массива.
  • ARRAY_N — результат будет возвращен в виде пронумерованного массива.
    По умолчанию OBJECT

row_offset(число) Номер возвращаемой строки результата запроса. 0 — это первая строка (установлено по умолчанию)

Примеры

#1. Получим всю информацию о ссылке 10

#2. С использованием константы:

get_col — выбор столбца таблицы

Функция выбирает данные целой колонки таблицы и возвращает их в виде одномерного массива.

Если запрос вернул больше чем одну колонку (столбец), то функция вернет только данные первого столбца, остальное можно будет получить из переменной last_result . Можно указать отступ в $column_offset , чтобы получить данные не первого столбца, а, например, второго: $column_offset = 1.

Возвращает

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

$query(строка) Запрос который нужно выполнить. Можно установить этот параметр в значение null , тогда функция вернет результат последнего запроса, который был произведен. $column_offset(число) Флаг указывающий какую колонку возвращать. По умолчанию (первая колонка).

Примеры

#1. Пример того как работает метод и что возвращает

Допустим у нас есть такой запрос на получение всех ревизий:

#1.1 Альтернативный вариант получить колонку — Замена для метода get_col()

get_col() и get_var() возвращает NULL в качестве значений полей, если в значении находится пустая строка (проверял на версии WP 5.1.1). Когда нам нужно получить в этом случае пустую строку, можно использовать такую замену get_col() :

#2. Выбор столбца из результатов запроса

Для этого примера представим, что у нас блог об автомобилях. Каждый пост описывает какой-либо автомобиль (например, Ford Mustang 1969 года). Для каждого поста предусмотрено по 3 произвольных поля: manufacturer (производитель), model(модель) и year(год выпуска). Этот пример выведет на экран заголовки постов, отфильтрованных по производителю (ford) и отсортированных по модели и году.

get_col здесь используется для того, чтобы получить массив ID всех записей, удовлетворяющих определенным критериям и отсортированных в нужном порядке. Затем через цикл foreach мы выводим заголовки по имеющимся у нас ID:

#3. Список постов которые имеют определенное произвольное поле (Color)

Но отсортированы они по значению другого произвольного поля (Display_Order).

get_results — выбор нескольких строк таблицы

Получает различные данные из нескольких строк таблицы. Функция возвращает результат запроса в массиве, каждый элемент которого представляет собой результат функции get_row , т.е. в каждом элементе массива находятся все запрашиваемые данные одной строки таблицы или строки из полей указанных в запросе.

Возвращает
  • Результат запроса в виде массива объектов ( OBJECT , OBJECT_K ), массива массивов ( ARRAY_A , ARRAY_N ).
  • Вернет пустой массив: array() — когда строк по запросу не найдено или ошибка запроса.
  • Вернет NULL — когда запрос пустая строка или передан неправильный тип вывода ( $output_type ).

query(строка) Запрос который нужно выполнить. Можно установить этот параметр в значение null , тогда функция вернет результат последнего запроса, который был произведен. output_type(строка)

Флаг указывающий как нужно вернуть данные. По умолчанию OBJECT. есть 4 варианта:

  • OBJECT — вернет массив объектов с числовыми ключами — элементы массива будут объекты полученных данных.
  • OBJECT_K — похож на предыдущий, только в индексах главного массива будут значения первой колонки результата запроса. Обратите внимание, если в индекс будут попадать одинаковые значения, то данные будут стирать друг друга.
  • ARRAY_A — вернет нумерованный двумерный массив, каждый вложенный элемент которого будет ассоциативным массивом, в котором ключом будет название колонки.
  • ARRAY_N — вернет нумерованный двумерный массив, каждый вложенный элемент которого будет так же нумерованным массивом.

Примеры

#1. Получим > меню

insert — вставка новой записи (строки) в таблицу

Вставляет указанные данные в указанную таблицу.

Метод включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET[‘foo’] .

Возвращает
  • число — число вставленных строк.
  • false — если данные не были вставлены в таблицу.

ВНИМАНИЕ! Вернет false (без каких либо ошибок), когда передаваемая для вставки строка (значение ячейки) длинее максимально возможного. Например колонка varchar(10) (длина значения 10 символов), а в переданных данных для вставки указана строка с 11 или более символами.

Поймать такой баг очень сложно! Поэтому надо иметь это ввиду, когда все вроде бы должно работать (правильные данные передается), но wpdb::insert() возвращает false без каких-либо ошибок.

Такая проблема касается почти всех методов, это:
wpdb::replace()
wpdb::insert()
wpdb::update()
wpdb::delete()

После добавления данных созданное значение AUTO_INCREMENT можно получить в переменной: $wpdb->insert_id

table(строка) Название таблицы в которую будем вставлять данные. data(строка) Данные которые нужно вставить: ‘колонка куда вставлять’ => ‘что вставлять’ . format(строка)

Формат данных который будет ассоциирован с указанными значениями в параметре $data . Если не указать, то для всех значений $data будет указан формат строки. При указании формата, WordPress переводит переданные данные в указанный формат перед тем, как сохранить данные в базу данных. Возможные форматы данных:

  • %s — строка
  • %d — целое число
  • %f — дробное число

Примеры

#1. Вставим в значение в строку таблицы table, где первое значение строка, а второе число:

update — обновление записи (строки) в таблице

Обновляет указанную строку таблицы.

Метод включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET[‘foo’] .

Читайте также про обертку для этой функции, которая расширяет её функциональность.

Возвращает
  • число — сколько строк было обработано
  • 0 — запрос был выполнен корректно, но ни одна строка не была обработана. Если в БД уже есть данные и вы пытаетесь обновить, указав точно такие же данные, то wpdb::update() вернет 0.
  • false — запрос провалился или ошибка запроса.

Так как возвращается 0, если никакие поля не были обновлены (изменены), но запрос был выполнен корректно, проверку результата запроса на ошибку нужно делать с учетом типа возвращаемых данных $res === false .

Примеры

#1. Обновим строку ID которой равен 1

Значение первой колонки строка, значение второй колонки число:

#2. Тоже самое с указанием типов передаваемых данных

replace — замена строки

Обновляет или создает строку в таблице. Если строка с указанным ключом PRIMARY KEY уже есть все остальные указанные поля будут обновлены у строки. Если такой строки в таблице еще нет, то функция вставит (insert) новую строку.


После вставки, ID созданный для колонки AUTO_INCREMENT можно получить в свойстве $wpdb->insert_id .

Метод включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET[‘foo’] .

PRIMARY KEY может состоять из нескольких ключей. В этом случае при поиске для замены или для создания новой строки всегда будут использоваться колонки указанные в PRIMARY KEY. Например PRIMARY KEY состоит из двух колонок ID и type , т.е. ключ при создании указывался так: PRIMARY KEY (ID,type) . Тогда для замены существующей строки в $data нужно указать значение этих двух колонок. Если например указать ID и не указать type, то существующая строка не будет найдена и будет создана новая строка с указанным ID и пустым значением type. Все остальные поля кроме полей из PRIMARY KEY в поиске существующей строки не участвуют.

Если длина строки в параметре $data больше чем допускается в ячейке таблицы MySQL, вставка провалиться и функция вернет false. При этом в свойство $wpdb->last_error сообщение об ошибке НЕ будет записано!

Поэтому очень важно убедиться, что вставляемые данные подходят под размер ячеек (колонок). Иначе просто ничего не произойдет и вы не увидите никаких ошибок или предупреждений.

Всегда заменяются все поля таблицы. Например, если у таблицы есть поля primary, one, two, three , а мы указали в параметре $data только primary, one , то поля two и three получат дефолтные значения, даже если там уже были данные.

Возвращает

Число (кол-во обработанных строк), 0 или false.

  • число — сколько строк было обработано (удалено или вставлено). Если была замена (обновление), то для каждой обновленной строки вернется +2 (удаление и вставка). Если была просто вставка, то для каждой вставленной строки вернется +1.
  • 0 — запрос был выполнен корректно, но ни одна строка не была обработана.
  • false — запрос провалился — ошибка запроса. Или когда невозможно заменить или создать новую строку в таблице.

Вернет количество затронутых строк — это сумма вставленных и удаленных строк. Если вернулось 1 при замене одной строки — это значит что одна строка была вставлена и ни одна не была удалена. Если число больше 1 — это значит, что одна или больше строк были удалены перед вставкой новой строки.

Иногда может произойти замена сразу нескольких старых строк — это когда заменяемые данные совпадают с существующими, а уникальный индекс у старых строк при этом разный.

$table(строка) Название таблицы, в которой нужно заменить данные. $data(массив) Данные, которые нужно заменить/вставить: ‘название колонки’ => ‘новое значение’ . $format(массив/строка) Формат данных который будет ассоциирован с указанными значениями в параметре $data . Если не указать, то все поля будут считаться строками, если другого не указано в свойстве wpdb::$field_types . Возможные значения формата: %s — строка, %d — число (любые числа), %f — дробное число (с плавающей точкой).
По умолчанию: null

Примеры

Заменим строку с главным ключом >ID, column1, column2 ).

Строка будет добавлена если её нет или полностью обновлена если она есть. Тут важно указывать значения для всех полей, потому что поля без значений получат дефолтные, даже если в них до этого были данные.

delete — удаление строки из таблицы

Удаляет строки из таблицы по переданному в параметр $where условию.

Метод включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET[‘foo’] .

Возвращает

Число/0. Число удаленных строк или 0, если ничего не удалено.

$table(строка) (обязательный) Название таблицы. $where(массив) (обязательный) Массив условий, по которым будут выбираться строки для удаления. Например:
array(‘id’ => 25, ‘title’ => ‘книги’) удалит строку с полями > $where_format(строка/массив) Формат данных который будет ассоциирован с указанными значениями в параметре $where . Возможные значения формата: %s — строка; %d — любое число; %f — FLOAT число. Если не указать формат, то все значения в WHERE будут обработаны как строки.
По умолчанию: null

Примеры

prepare — защита запроса от SQL инъекций

В SQL есть такое понятие как «инъекция» (внедрение в запрос SQL кода). Cделать его можно, когда в запрос передаются динамические данные. Например, допустим в запрос передаётся значение input поля, тогда в поле формы можно указать данные, которые в итоге станут частью SQL запроса. Так можно внедриться в запрос и что-нибудь испортить или просто нарушить код самого запроса. Выглядит это так:

Теперь, если $var = 2′ AND > то в результате запрос получиться такой:

Таким образом можно внедриться в сам запрос и изменить его.

Чтобы этого не произошло запросы с передаваемыми в них переменными нужно обрабатывать методом wpdb::prepare() :

Синтаксис

Запрос. В нем можно использовать заменители:

  • %d — число
  • %s — строка
  • %f — дробное число (число с плавающей точкой, с версии 3.3).

Использование знака % в любых других случаях может вызывать ошибку, поэтому его нужно претворять еще одним %. Например, чтобы использовать команду LIKE %вхождение% , её нужно записать так: LIKE %%вхождение%% .

ВАЖНО! Плейсхолдеры вида %1$d запрещены с версии 4.8.2 в целях безопасности. Запросы с ними Работать не будут. Например:

До версии 4.8.2 можно было делать так:

Но для строк в таком случае крайние скобки не ставятся, их нужно ставить в самом запросе:

Переменные, которые будут использованы при замене плейсхолдеров в запросе.

  • Переменные можно указать через запятую, как в php функции sprintf( ‘query’, param1, param2 ) .
  • Переменные можно передать в массиве: $wpdb->prepare( ‘query’, [ param1, param2 ] ) .

param1. Еще переменные.

Заметка: с версии WP 3.5 wpdb::prepare() обязательно должны быть переданы минимум 2 параметра: запрос и значение переменной, иначе появится php ошибка.

esc_sql()

Кроме метода $wpdb->prepare() запрос можно очистить функцией esc_sql(). Но «prepare» предпочтительнее, потому что исправляет некоторые ошибки форматирования.

ВАЖНО! После esc_sql() очищенную строку можно использовать только внутри кавычек » или «» . Т.е. правильно писать field = ‘$value’ , а не field = $value , где $value = esc_sql( $value );

Примеры

#1. Добавим произвольное поле к посту 10:

Как видно из примера, с prepare() нет необходимости заботиться об экранировании кавычек и прочего, что может навредить запросу.

#2. Такой же пример

Только тут все переменные передаются во втором параметре в виде массива:

Передавать параметры в виде массива, может быть полезно, когда мы заранее не знаем количество аргументов, которые нужно будет передать.

esc_like — очистка LIKE строки

Чтобы подготовить строку для использования в LIKE части SQL запроса, используйте $wpdb->esc_like( $text ) :

Короткая запись с prepare()

Функция like_escape( $string ) запрещена с версии 4.0. Используйте вместо нее $wpdb->esc_like( $string )

show/hide/print_error — показать или спрятать ошибки SQL

Есть возможность управлять ошибками, включать или выключать показ ошибок для последнего запроса:

Так же можно вывести на экран саму ошибку, если таковая имеется:

get_col_info — получить информацию о колонке

Получает информацию о колонках последнего запроса. Функция вернет массив с информацией об определенных в запросе колонках. Если в запросе колонки не определены, то функция вернет информацию о всех колонках таблицы. Это может пригодится, когда был возвращен объект, о данных которого мы ничего не знаем.

Работает на основе кэша, поэтому сначала нужно запустить запрос с помощью get_resiults() , get_col() , get_var() и т.д. а потом вызвать wpdb::get_col_info() которая вернет данные колонок последнего запроса.

В этом параметре указывается какую информацию нам нужно получить. По умолчанию: name. Вот список возможных вариантов:

  • name — название колонки.
  • table — название таблицы к которой принадлежит колонка.
  • max_length — максимальная длинна данных колонки
  • not_null — 1 если ячейка колонки не может принимать значение NULL
  • primary_key — 1 если колонка является первичным ключом
  • unique_key — 1 если ячейки колонки должны быть всегда уникальны
  • multiple_key — 1 если ячейки колонки могут быть не уникальны
  • numeric — 1 если колонка содержит числовые данные
  • blob — 1 если колонка содержит данные типа BLOB (двоичные данные)
  • type — тип колонки
  • unsigned — 1 если колонка имеет тип данных UNSIGNED
  • zerofill — 1 если колонка имеет тип данных ZEROFILL

По умолчанию: name

Указатель, информацию о какой колонке нужно получить:

Если указать -1 , то будут получена информация о всех колонках в виде массива. По умолчанию.

  • Если указать 0 или больше то будет возвращена информация об указанной колонке, где 0 — первая колонка, 1 — вторая и т.д.
    По умолчанию: -1
  • Примеры

    flush — сброс кэша

    Можно сбросить последние сохраненные данные в свойствах класса:

    Эта команда очистит следующие свойства (переменные): $wpdb->last_result , $wpdb->last_query и $wpdb->col_info .

    Свойства (переменные) класса

    Таблицы Базы Данных WordPress

    $wpdb->posts Таблица куда записываются посты, постоянные страницы, произвольные типы записей, вложения и т.п. $wpdb->postmeta Таблица с записями о произвольных полях.
    Мета поля для таблицы $wpdb->postmeta .

    $wpdb->users Таблица с данными о зарегистрированных пользователях. $wpdb->usermeta Дополнительная информация о пользователях, такая как Имя, Ник, права и прочее.
    Мета поля для таблицы $wpdb->users .


    $wpdb->comments Таблица с записями комментариев. $wpdb->commentmeta Мета поля для таблицы $wpdb->comments .

    $wpdb->terms Таблица содержащая в себе информацию о названии категорий, меток, категорий ссылок и других таксономий. $wpdb->termmeta Таблица содержащая в себе дополнительные поля для таблицы $wpdb->terms . $wpdb->term_taxonomy Таблица с информацией о различных таксономиях их описание. $wpdb->term_relationships Таблица связывающая таксономии с контентом (постами, записями и т.п.)

    $wpdb->links Таблица с записями ссылок. $wpdb->options Таблица опций (настроек).

    Работаем с базой данных в WordPress. Основы работы с базой данных в WordPress, с помощью класса wpdb

    Дата публикации: 2012-08-31

    От автора: в то время как вы уже применяете многие функции в WordPress для взаимодействия с базой данных, существует легкий и безопасный способ делать это напрямую с помощью класса $wpdb. Основанный на великолепном классе ezSQL от Джастина Винсента (Justin Vincent), $wpdb дает вам возможность адресовать запросы к любой таблице в своей базе данных, а также помогает вам оперировать возвращенными данными. WPDB — это отличный класс, для работы с базой данных в WordPress.

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

    Класс $wpdb моделирует и автоматизирует множество заданий, связанных с базой данных WordPress..

    В этой статье я покажу вам, как начать работу с классом $wpdb, как возвращать данные из своей базы WordPress и как запускать более продвинутые запросы, которые обновляют или удаляют что-нибудь в базе данных. Приемы, описанные здесь, уберут некоторые ограничения, на которые вы натыкаетесь в таких функциях, как get_posts() и wp_list_categories(), позволяя вам перекраивать запросы под ваши частные нужды. Этот метод также может сделать ваш вебсайт более эффективным, предоставляя только те данные, которые нужны — ни больше, ни меньше, теперь вы будете работать с базой данных WordPress по-взрослому.

    Как создать сайт самому?

    Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

    Начинаем работать с базой данных в WordPress

    Если вы знаете, как работает MySQL или подобные ему языки, то легко освоитесь с этим классом и вам придется иметь в виду только небольшое количество названий функций. Основное применение этого класса лучше всего объясняется на примере, так что давайте сделаем запрос к своей базе данных и получим ID и названия четырех последних постов, отсортированных в порядке количества комментариев (по убывающей).

    Как видно, это основной SQL-запрос с обернутым вокруг него некоторым количеством PHP. Класс $wpdb содержит метод (метод – это специальное название функций, находящихся внутри классов) с названием get_results(), который не только извлечет ваши результаты, но и положит их в подходящий объект. Вы могли заметить, что вместо применения wp_posts для названия таблицы я использовал $wpdb->posts, что помогает получить доступ к основным таблицам WordPress. Позже будет объяснено, зачем это нужно применять.

    Объект $results теперь содержит ваши данные в следующем формате:

    Извлечение результатов из базы данных

    Если вы хотите отыскать и выбрать некую информацию из базы данных WordPress, можете применить для структурирования данных, одну из четырех функций-ассистентов.

    get_results()

    Это та функция, которую мы рассматривали ранее. Она подходит лучше всего, когда вам нужны двухмерные данные (множество строк и колонок). Она превращает данные в массив, содержащий отдельные объекты для каждой строки.

    get_row

    Когда вам нужно найти только одну отдельную строку в базе данных (например, пост с самым большим количеством комментариев), можно использовать get_row(). Он извлекает данные в одномерный объект.

    get_col

    Этот метод во многом похож на get_row(), но вместо захвата отдельной строки результатов он берет отдельную колонку. Это полезно, если вам хотелось бы вернуть ID только 10 самых комментируемых постов. Как и get_row(), он хранит результаты в одномерном объекте.

    get_var

    Во многих случаях вам нужно всего одно значение из базы данных; например, адрес электронной почты одного из ваших пользователей. В таком случае можно применять get_var для его поиска в качестве простого значения. Тип данных значения будет таким же, как его тип в базе данных (т.е. целые числа будут целыми числами, строки будут строками).

    Вставка в базу данных

    Чтобы сделать вставку, можно использовать метод insert:

    Этот метод принимает три аргумента. Первый определяет название таблицы, в которую вы вставляете данные. Второй аргумент – это массив, содержащий колонки и их соответствующие значения как пары «ключ-значение» (key-value). Третий параметр определяет тип данных ваших значений в том порядке, которые вы им присвоили. Вот пример:

    Если вы привыкли записывать свои вставки, он сначала может показаться громоздким, но на самом деле так вы получаете большую гибкость, потому что этот метод использует массивы как вводы.

    Определение формата – дополнительная опция; все значения по умолчанию считаются строками, но включать его в метод – установившаяся практика. Три значения, которые вы можете использовать – это %s для строк, %d для десятичных чисел и %f для чисел с плавающей точкой.

    Обновление данных

    К данному моменту вы уже не удивитесь, когда услышите, что для обновления данных у нас также есть метод-ассистент с очень сильным названием update(). Его применение напоминает то, что мы видели выше; но для манипулирования выражением where нашего обновления нужны два дополнительных параметра.

    Параметры $table, $data и $format должны быть вам знакомы; они все те же, что прежде. Используя параметр $where, мы можем определить условия обновления. Это должен быть массив в форме пар «колонка-значение» (column-value). Если вы определяете множественные параметры, то они будут объединены логикой AND. $where_format – такой же, как $format: он определяет формат значений в параметре $where.

    Прочие запросы

    В то время как представленные выше помощники просто отличные, иногда необходимо выполнение других или более сложных запросов, чем могут позволить ассистенты. Если вам требуется выполнить обновление со сложным предложением where, содержащим множественную логику AND/OR, то вы не сможете применить метод update(). Если вам нужно сделать что-то вроде удаления строки или установки набора характеристик соединения, то вам бы понадобилось использовать «общий» метод query(), дающий возможность выполнять любой вид запросов.

    Защита и валидация

    Надеюсь, вам не нужно рассказывать о том, как важно убедиться, что ваши данные защищены и что вашей базой данных не смогут манипулировать! Валидация данных немного выходит за пределы этой статьи, но обязательно посмотрите когда-нибудь, что может сказать Кодекс WordPress о Валидации данных (Data Validation).

    Вдобавок к валидации вам понадобится экранировать все запросы (escape). Даже если вы не знакомы с атаками SQL-инъекции, все равно применяйте этот метод, а позже почитайте о нем, потому что это очень важно.

    Хорошая новость: если вы применяете любые функции-помощники, то вам не нужно ничего делать: запрос для вас уже экранирован. Однако если вы применяете метод query(), экранирование вам придется вручную с помощью метода prepare().

    Чтобы это было немного более удобоваримо, давайте немного перепишем этот основной формат.

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

    Переменные класса и прочие методы

    Наряду с этими превосходными методами существует довольно много других функций для облегчения жизни. Я покажу вам несколько самых обычных, но, пожалуйста, обязательно посмотрите полный список всего, что может предложить $wpdb, на странице Кодекса WordPress, ссылка на который приведена выше.

    Как создать сайт самому?

    Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

    insert_id()

    Каждый раз при вставке чего-либо в таблицу у вас там наверняка появится автоматически приращенный ID. Чтобы найти значение самой последней вставки, выполненной вашим скриптом, можно использовать $wpdb->insert_id.

    num_rows()

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

    Названия таблиц

    Все базовые названия таблиц хранятся в переменных, чьи названия в точности такие же, как их эквивалент основной таблицы. Название таблицы постов (возможно, wp_posts) будет храниться в переменной $posts, так что вы могли бы вывести ее с помощью $wpdb->posts.

    Мы используем ее, потому что у нас есть возможность выбирать префикс для своих таблиц WordPress. В то время как большинство людей использует префикс по умолчанию wp, некоторые пользователи хотят или нуждаются в пользовательском префиксе. Во имя гибкости этот префикс жестко не кодируется, так что если вы пишете плагин и применяете в запросе wp_postmeta вместо $wpdb->postmeta, ваш код на некоторых вебсайтах не станет работать.

    Если вам нужно получить данные из небазовой таблицы WordPress, для этого нет ни одной специальной переменной. В таком случае вы можете просто написать название таблицы, как обычно.

    Управление сообщениями об ошибке

    Вызывая методы show_errors() или hide_errors(), можно включать или выключать сообщения об ошибках (по умолчанию они выключены), чтобы получить больше информации о происходящем. В любом случае для распечатки ошибок последнего запроса вы также можете применять метод print_error().

    Построение простого отслеживания с применением знания $wpdb

    Если вы новичок, то, возможно, понимаете, о чем я говорю, но, может быть, находите сложным для реализации. Итак, давайте возьмем пример простого плагина отслеживания WordPress, который я сделал для вебсайта.

    Простоты ради я не стану описывать каждую деталь этого плагина. Просто покажу структуру базы данных и несколько запросов.

    Структура нашей таблицы

    Чтобы отследить щелчки и наведение мыши на рекламных объявлениях я создал таблицу; давайте назовем ее “tracking.” Эта таблица записывает действия пользователей в режиме реального времени. Каждое наведение и щелчок записывается в ее собственный ряд в следующей структуре/порядке:

    ID
    Автоматически приращенное ID.

    time
    Дату и время совершения действия.

    deal_id
    ID сделки, которое связано с действием (т.е. рекламный блок, на который щелкали или смотрели).

    action
    Вид действия (т.е. щелчок или наведение).

    action_url
    Страница, на которой инициировано действие.

    user_id
    ID пользователя, если он залогинен.

    user_ip
    IP пользователя для устранения любых злоумышленных намерений.

    Эта таблица довольно быстро станет весьма большой, поэтому она сгруппирована в ежедневную статистику и время от времени удаляется. А теперь давайте просто поработаем с ней.

    Вставка данных в таблицы

    При щелчке пользователя на рекламное объявление он обнаруживается, а нужная нам информация посылается в скрипт в форме массива $_POST со следующими данными:

    Затем мы можем вставить эти данные в базу данных с помощью нашего метода-помощника, как здесь:

    С риском ухода в сторону от дела я обращусь к некоторым вопросам, которые могли заинтересовать вас в этом отдельно взятом примере. Вы могли подумать, а как же насчет валидации данных? Щелчок мог поступить от администратора вебсайта или пользователь мог по ошибке щелкнуть дважды, или могло произойти множество других вещей.

    Мы решили, что, так как нам не нужна статистика в реальном времени (достаточно ежедневной статистики), нет смысла проверять данные при каждом внесении. Ежедневно в районе полуночи, во время низкого уровня трафика, данные собираются в новую таблицу. Перед группированием данных мы обеспечиваем ее очистку, удаляя дубликаты и так далее. Данные, конечно, экранируются перед вставкой в таблицу, потому что мы применяем функцию-помощника; таким образом, тут мы себя обезопасили.

    Просто удалить оптом все сделанное администраторами легче, чем делать проверку при каждой вставке. Таким образом, с плеч сервера снимается груз значительного количества обработки.

    Удаление действий с IP, внесенного в «черный список»

    Если обнаруживается, что IP-адрес 168.211.23.43 очень-очень нехорошо себя ведет, мы можем внести его в «черный список». В таком случае при группировке ежедневных данных нам понадобится удалить все входы с этого IP.

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

    Обновление итогов

    Мы храним свои рекламные объявления как пользовательские типы постов; а для облегчения статистической отчетности обычно храним общее количество щелчков, получаемых объявлением отдельно. Можно было бы просто сложить все щелчки с тем же успехом в своей базе данных tracking для данной сделки, так что давайте сначала рассмотрим это.

    Так как получить отдельную переменную легче, чем постоянно загружать себя более сложными запросами каждый раз при группировке данных, можно было бы хранить текущую сумму отдельно. Наши рекламные объявления хранятся как посты с пользовательским типом, так что логично держать эту сумму в таблице postmeta. Для хранения этих данных давайте применим мета-ключ total_clicks.

    Финальные мысли и подсказки

    Надеюсь, вы теперь лучше понимаете класс WordPress $wpdb и сможете применять его для улучшения своих проектов. В заключение вот вам несколько последних подсказок и приемов эффективного использования этого класса.

    Я умоляю вас быть осмотрительными: вместе с большими возможностями появляется большая ответственность. Обеспечьте экранирование своих данных и их валидацию, потому что неправильное применение этого класса – вероятно основная причина взломанных вебсайтов!

    Запрашивайте только те данные, которые вам нужны. Если вы будете показывать название статьи, нет необходимости искать все данные из каждой строки. В таком случае просто запрашивайте название и ID: SELECT title, ID FROM wp_posts ORDER BY post_date DESC LIMIT 0,5.

    В то время как можно применять метод query()для любого запроса, лучше, где возможно, использовать методы-ассистенты (insert, update,get_row и т.д.). Они более модульные и безопасные, потому что автоматически экранируют ваши данные.

    Будьте осторожны при удалении записей из базы данных WordPress (или любой другой). Когда WordPress удаляет комментарий, также происходит множество других действий: нужно уменьшить на один подсчет комментариев в wp_poststable, все данные из таблицы comment_meta также нуждаются в удалении, и так далее. Убедитесь, что тщательно прибираете за собой, особенно при удалении чего-либо.

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

    На этом, урок по профессиональному взаимодействию с базой данных в WordPress, окончен.

    Автор: Daniel Pataki

    Редакция: Команда webformyself.

    Как создать сайт самому?

    Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

    WordPress-Ученик

    12 фишек без которых Вы не создадите полноценный сайт на WordPress!

    Мастер Йода рекомендует:  Пошаговое создание легендарной игры Bejeweled на jQuery
    Добавить комментарий