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 позволяет сделать это.




Комментарии «WP изнутри (подключаем и используем API WP)»:
Комментариев: 2. Обязательно оставьте свой!
Extrimer 13.11.2011 в 8:35

$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);

А как сюда еще и картинку вставить?

pistol 07.02.2012 в 11:14

$data['content'] = ‘<img src….';



Ваш комментарий: