О web-разработке
и даже немного больше...

Добавление записей в WordPress средствами PHP

Для решения некоторых задач иногда требуется возможность добавления новой записи в WordPress средствами PHP. Такая потребность может возникать с необходимостью автоматизации процесса добавления постов/товаров в каталог. В WordPress есть специальные функции, которые отвечают за создание записей. Использовать их естественно необходимо в пределах работы самого движка. Однако мы можем создавать собственные скрипты, и подключать в них уже API WordPress. Это может быть очень удобно даже когда необходимо реализовать ajax-обработчики. Давайте рассмотрим простой пример создание записи в WordPress.

Создание записи в WordPress средствами PHP

Для примера использования функции создания записи, в директории сайта создадим файл 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_title – заголовок поста;
  • post_content – содержимое записи;
  • post_status – статус публикации, publish – запись опубликована;
  • post_author – ID пользователя, от имени которого добавляется запись;
  • post_category – ID рубрик, к которым привязана запись.

Далее массив с полями передаётся непосредственно функции, которая и создаст новую запись.

$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 в записях используются дополнительные поля. Как их добавлять мы рассмотрим далее.

Добавление дополнительных полей для записи WordPress в PHP

После того как мы создали новую запись, мы получили значение в переменной $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 в PHP

Добавление изображения в WordPress можно разделить на два этапа. Первый этап – изображение следует загрузить медиа библиотеку, после чего мы получаем ID-записи файла в медиа библиотеке. Далее зная ID-файла, мы можем связать его с превью поста.

// загрузка файла в медиа-библиотеку
$media_id = media_handle_sideload( $file_array, $post_id, $description);

В качестве параметров функции передаются три переменные:

  • $file_array – стандартный массив с полями файла, создаваемый при отправке файла на сервер ($_FILES);
  • $post_id – 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);

Загрузка изображения в WordPress из URL

Ещё один способ загружать изображение на сайт – посредством 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);
Опубликован: 10.09.2020 г.

См. также:

Убираем URL из формы комментариев WordPress
Работа с базой данных в WordPress
SQL-запросы для смены домена в WordPress
Мультиязычность с помощью плагина Polylang
Как создать свои шорткоды в WordPress
Как добавить виджет на сайт WordPress?
Как отключить архивы по авторам в WP?
Импорт записей из Excel в WordPress

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта