Добавление поста в wordpress средствами php
2017-01-28 14:12:00
Эта статья будет полезна тем, кто захочет написать собственный парсер с автопостингом для Wordpress. В данном материале будет рассмотрен механизм создания и публикации поста средствами php. Скрипт создаётся с целью постинга без захода в админку и без ручной работы по заполнению полей публикуемого поста поста.
Создаём в корне сайта файл upload-post.php, при обращении к нему через браузер будет добавляться пост. Убедитесь, что он сохранён в кодировке utf-8, иначе скрипт будет работать некорректно.
Добавление основных полей поста вордпресса средствами php
Подключаем файл инициализации движка Wordpress wp-load.php, используем функцию вордпресса wp_insert_post() для добавления поста. Вот что у меня получилось на начальном этапе:
<?php
require_once( dirname(__FILE__) . '/wp-load.php' );
require_once( dirname(__FILE__) . '/wp-admin/includes/admin.php');
$post_data = array(
'post_title' => 'Новый тестовый пост',
'post_content' => 'Контент тестового поста',
'post_status' => 'publish',
'post_author' => 1,
'post_category' => array(1)
);
// Вставляем запись в базу данных
$post_id = wp_insert_post($post_data, true);
print_r($post_id); // Выведет id-ник поста, либо объект с массивом ошибок
Мой массив $post_data имеет минимальный набор значений. Для того, чтобы узнать о всех возможных параметрах, смотрите документацию по функции wp_insert_post().
Откройте браузер и зайдите по адресу "http://ваш_домен/upload-post.php". Если скрипт отработал успешно - появиться цифра. Перейдите на главную страницу блога - новая запись должна появиться.
Добавление дополнительных полей в запись wordpress средствами php
Если у Вас навороченный сайт на wordpress, вряд ли Вам хватает основных полей записи блога. В ход идут Custom Fields - произвольные поля. Давайте разберёмся, как их добавлять средствами php. Предположим, что все дополнительные поля уже настроены через админку wodpress, и нам просто нужно вставить значения для этих полей в добавляемом посту.
Для этой цели мы используем метод update_post_meta(). Добавляем к существующему коду функцию, изменяющую значение произвольного поля в добавленном посте:
<?php
require_once(dirname(__FILE__) . '/wp-load.php');
$post_data = array(
'post_title' => 'Новый тестовый пост с дополнительным полем',
'post_content' => 'Контент тестового поста с дополнительным полем',
'post_status' => 'publish',
'post_author' => 1,
'post_category' => [1]
);
// Вставляем запись в базу данных
$post_id = wp_insert_post($post_data, true);
// Задаём значение для дополнительного поля:
// В одном из моих блогов есть дополнительное поле rating (числовое).
// Его мы и зададим. Для примера, выставим значение 80
update_post_meta($post_id , 'rating', 80);
// Второе поле - строковое - postscriptum
update_post_meta($post_id , 'postscriptum', 'Спасибо за внимание. Подписывайтесь на мой блог');
Добавление картинки в Wordpress средствами php
Допустим нам нужно залить и прикрепить обложку к записи wordpress. Для этого нам нужно: 1) Скачать картинку по ссылке и сохранить её в папку uploads. 2) Добавить загруженный файл в медиатеку Wordpress. 3) Назначить сохранённый в медиатеку элемент в качестве обложки поста. Для этого нам понадобятся функции download_url() и media_handle_sideload(). Добавляем в auto-poster.php следующий код:
// ... добавляем в уже созданный upload-post.php код:
// Для примера возьмём картинку с моего же блога, которая была залита вне структуры wordpress
$url = 'http://sergeivl.ru/public/img/svlJForm.png';
// Прикрепим к ранее сохранённому посту
//$post_id = 3061;
$description = "Картинка для обложки";
// Установим данные файла
$file_array = array();
$tmp = download_url($url);
// Получаем имя файла
preg_match('/[^\?]+\.(jpg|jpe|jpeg|gif|png)/i', $url, $matches );
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;
// загружаем файл
$media_id = media_handle_sideload( $file_array, $post_id, $description);
// Проверяем на наличие ошибок
if( is_wp_error($media_id) ) {
@unlink($file_array['tmp_name']);
echo $media_id->get_error_messages();
}
// Удаляем временный файл
@unlink( $file_array['tmp_name'] );
// Файл сохранён и добавлен в медиатеку WP. Теперь назначаем его в качестве облож
set_post_thumbnail($post_id, $media_id);
Запускам, проверяем, радуемся. Принцип я показал. А дальше можете оформлять в виде плагина, писать парсеры с автоматическим добавлением записей в wordpress. Исходник скрипта в моём репозитории на GitHub.