Для решения некоторых задач иногда требуется возможность добавления новой записи в WordPress средствами PHP. Такая потребность может возникать с необходимостью автоматизации процесса добавления постов/товаров в каталог. В WordPress есть специальные функции, которые отвечают за создание записей. Использовать их естественно необходимо в пределах работы самого движка. Однако мы можем создавать собственные скрипты, и подключать в них уже API WordPress. Это может быть очень удобно даже когда необходимо реализовать ajax-обработчики. Давайте рассмотрим простой пример создание записи в WordPress.
Для примера использования функции создания записи, в директории сайта создадим файл add-post.php. В самом начале файла необходимо инициализировать движок WordPress, чтобы нам стали доступны встроенные функции. Для этого следует подключить файлы wp-load.php и admin.php.
require_once( dirname(__FILE__) . '/wp-load.php' ); require_once( dirname(__FILE__) . '/wp-admin/includes/admin.php');
Далее для создания записи мы будет использовать встроенную функцию wp_insert_post() которой стоит передать массив с основными полями для записи.
$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);
В качестве результата работы функции в переменную $post_id будет передан ID новой записи, либо объект с массивом ошибок. В целом весь пример будет выглядеть следующим образом:
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); echo '<pre>'; print_r ( $post_id ); echo '</pre>';
Довольно часто в WordPress в записях используются дополнительные поля. Как их добавлять мы рассмотрим далее.
После того как мы создали новую запись, мы получили значение в переменной $post_id. Это ID записи, теперь мы можем выполнить добавление/обновление дополнительных полей посредством встроенной функции update_post_meta(). Давайте для примера выставим дополнительному полю с кодом post_rating значение 10:
update_post_meta($post_id , 'post_rating', 10);
Аналогичным образом мы можем выставлять значение дополнительного поля строкового типа. К примеру, у нас есть дополнительное поле meta_desc со строковым типом.
update_post_meta($post_id , 'meta_desc', 'Здесь описание для поля meta_desc');
Как вы можете заметить — всё по аналогии, лишь передаются другие значения. Далее мы рассмотрим пример загрузки изображения для записи.
Добавление изображения в WordPress можно разделить на два этапа. Первый этап – изображение следует загрузить медиа библиотеку, после чего мы получаем ID-записи файла в медиа библиотеке. Далее зная ID-файла, мы можем связать его с превью поста.
// загрузка файла в медиа-библиотеку $media_id = media_handle_sideload( $file_array, $post_id, $description);
В качестве параметров функции передаются три переменные:
После этого, когда мы получаем значение $media_id, мы можем привязать превью к посту:
set_post_thumbnail($post_id, $media_id);
Обратите внимание, в примере не приводится весь процесс проверки файла на корректность и т.д. Поэтому этот момент вам следует учитывать самостоятельно. В целом загрузка файла будет выполняться таким образом:
// загружаем файл в медиабиблиотеку $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'] ); // устанавливаем изображение поста set_post_thumbnail($post_id, $media_id);
Ещё один способ загружать изображение на сайт – посредством URL. Для этого в WordPress существует встроенная функция download_url(). Данная функция получает в качестве параметра URL-файла, который в результате будет загружен во временный каталог PHP. Для работы функции так же следует подключить следующий файл:
require_once( dirname(__FILE__) . 'wp-admin/includes/file.php');
Далее следует загрузить физически файл на сервер, и сформировать массив для добавления его в медиа-библиотеку:
// URL к файлу изображения $url = 'https://href.kz/img/test_file.png'; // описание для файла $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;
После того как в переменной $file_array мы имеем массив с полями файла, далее добавляем файл как уже описывалось выше:
// загружаем файл в медиабиблиотеку $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'] ); // устанавливаем изображение поста set_post_thumbnail($post_id, $media_id);