WP изнутри (подключаем и используем API WP)
Опубликовано 3 октября, 2011 в WordPress
WP имеет не самую понятную для человека базу данных, поэтому у программистов, которые пытаются управлять содержимым сайта, минуя админку, возникают проблемы. В этом посте расскажу, как очень просто добавить и отредактировать страницу или категорию, используя внутреннее API движка. Данная информация, скорее всего, пригодится тем, кто пишет парсер для WP.
Итак, предположим, наш парсер — parser.php в корне. Начать его работу стоит с подключения к базе данных, точнее, с подключения API WP, которое подключит конфиг и создаст соеднинение. Делается это элементарно:
<?php
include('wp-load.php');
?>
Теперь у нас есть подключение к базе и доступен огромный набор функций для работы с внешней частью сайта (можете посмотреть wp-includes/functions.php). Все открывшиеся после этого возможности невозможно перечислить в одном посте, здесь мы всего-лишь научимся добавлять страницы и категории. Подключим некоторые функции для работы (создание и редактирование) с записями:
include('wp-admin/includes/post.php');
Самые интересные для разработчика функции: wp_insert_term, get_default_post_to_edit и edit_post. Первая функция, wp_insert_term, служит для вставки категорий и меток. Предположим, наш парсер хочет вставить категорию «Софт» и дочернюю «Антивирусы», для этого нужно передать функции несколько параметров:
- Имя категории
- Тип (category)
- Массив дополнительных параметров (в WP просто передается $_POST пришедней формы).
Нам возвратится два ID в массиве: таблицы категорий (ключ ‘term_id’) и таблицы связей категорий (ключ ‘term_taxonomy_id’). Первый ID нам пригодится для создания дочерней категории, второй — для привязки нового поста к категории.
$name = 'Софт';
$ret = wp_insert_term( $name, 'category', array());
$name2 = 'Антивирусы';
$ret2 = wp_insert_term( $name2, 'category', array('parent' => $ret['term_id'])); //В третьем параметре мы передали ID материнской категориии
Готово. Создать пост — задача посложнее. Для этого нужно создать черновик и узнать его ID:
$post = get_default_post_to_edit( 'post', true ); $id = $post->ID;
Потом нужно отредактировать и опубликовать черновик. Делается это посредством передачи функции edit_post массива (в WP — это $_POST формы редактирования поста). Вот как это делается (категорий может быть присвоено несколько).
$data['post_title'] = 'Тестовый пост'; $data['post_name'] = 'Тестовый пост'; $data['post_ID'] = $id; $data['post_status'] = 'publish'; $data['post_category'] = array($ret2['term_taxonomy_id']); $data['content'] = 'Тестовый контент'; edit_post($data);
Все, готово. Полный код:
<?php
include('wp-load.php');
include('wp-admin/includes/post.php');
$name = 'Софт';
$ret = wp_insert_term( $name, 'category', array());
$name2 = 'Антивирусы';
$ret2 = wp_insert_term( $name2, 'category', array('parent' => $ret['term_id']));
$post = get_default_post_to_edit( 'post', true );
$id = $post->ID;
$data['post_title'] = 'Тестовый пост';
$data['post_name'] = 'Тестовый пост';
$data['post_ID'] = $id;
$data['post_status'] = 'publish';
$data['post_category'] = array($ret2['term_taxonomy_id']);
$data['content'] = 'Тестовый контент';
edit_post($data);
?>
Не забывайте, что файл должен быть в кодировке UTF-8.
Кто в теме, тот не даст соврать, что WP очень крут и удобен внутри. Правда, много времени требуется, чтобы изучить весь потенциал.
В следующем посте, скорее всего, поговорим о механизме дополнительных полей. С помощью доп. полей на WP можно создавать сложнейшие сайты, в том числе промышленные доски объявлений, где у каждой записи есть много полей, по которым необходимо искать нужную информацию (например — город, цена и т.д.). WP позволяет сделать это.
Комментариев: 2. Обязательно оставьте свой!
$data['post_title'] = ‘Тестовый пост’;
$data['post_name'] = ‘Тестовый пост’;
$data['post_ID'] = $id;
$data['post_status'] = ‘publish’;
$data['post_category'] = array($ret2['term_taxonomy_id']);
$data['content'] = ‘Тестовый контент’;
edit_post($data);
А как сюда еще и картинку вставить?
$data['content'] = ‘<img src….';