Добавление поста в wordpress средствами php

2017-01-28 15: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.