WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Публикация напрямую через БД

Хочу автоматизировать публикацию постов через Zennoposter напрямую в Базу данных без использования браузера.

Но возникла сложность с картинками, а именно с созданием значения meta_key - _wp_attachment_metadata, значение там задается приблизительно в таком формате a:5:{s5:"width";i...} - я понимаю, что это что-то вроде массива со всеми размерами загруженной картинки, но не пойму логику индексов: i, s5, s4 и т.д В поиске не смог найти ничего путного по логике формирования значения. Вообщем прошу Вашего наставления smile

И еще одно, пока искал ответ на свой вопрос, натолкнулся на эту статью wp_generate_attachment_metadata(), скажите, я правильно понял если создать php файл, поместить туда упомянутый в этой статье код

// файл должен находиться в директории загрузок WP.
$filename = '/path/to/uploads/2013/03/filname.jpg';

// ID поста, к которому прикрепим вложение.
$parent_post_id = 37;

// Проверим тип поста, который мы будем использовать в поле 'post_mime_type'.
$filetype = wp_check_filetype( basename( $filename ), null );

// Получим путь до директории загрузок.
$wp_upload_dir = wp_upload_dir();

// Подготовим массив с необходимыми данными для вложения.
$attachment = array(
	'guid'           => $wp_upload_dir['url'] . '/' . basename( $filename ), 
	'post_mime_type' => $filetype['type'],
	'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
	'post_content'   => '',
	'post_status'    => 'inherit'
);

// Вставляем запись в базу данных.
$attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id );

// Подключим нужный файл, если он еще не подключен
// wp_generate_attachment_metadata() зависит от этого файла.
require_once( ABSPATH . 'wp-admin/includes/image.php' );

// Создадим метаданные для вложения и обновим запись в базе данных.
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );

то мои поля в БД будут генерироваться автоматически? Или я ошибаюсь?! Спасибо

P.S уже после создания вопроса, на первый пункт сам нашел ответ - сериализованный массив! Извиняюсь, только-только начал изучать php smile Но второй вопрос остается открытым, как мне правильнее адаптировать вышеприведенный код под мои нужды?

0
Padawan
5.5 лет назад
  • 0

    Читай про https://wp-kama.ru/function/add_post_meta

    add_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );
    update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );

    Так же что бы картинка стала featured можно использовать set_post_thumbnail
    https://wp-kama.ru/function/set_post_thumbnail

    Пример кода в контексте

    global $user_ID;
    $new_post = array(
    	'post_title' => 'My New Post',
    	'post_content' => 'Lorem ipsum dolor sit amet...',
    	'post_status' => 'publish',
    	'post_date' => date('Y-m-d H:i:s'),
    	'post_author' => $user_ID,
    	'post_type' => 'post',    
    );
    
    $post_id = wp_insert_post($new_post);
    
    if( ! is_wp_error( $post_id ) )
    	   add_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );

    Альтернативный вариант сделать атачмет дочерним от поста:

    $attachment = array(
    				'ID' => $attach_id,
    				'post_parent' => $custom_post_id,
    			);
    
    			$res = wp_update_post($attachment);

    Эксперементируй, и используй то что работает

    Вот рабочий пример похожий на твой:

    $post_id = 1234;
    $images = array('filename1.png', 'filename2.png', ... 'filename10.png');
    
    // Get the path to the upload directory.
    $wp_upload_dir = wp_upload_dir();
    
    foreach($images as $name) {
    	$attachment = array(
    		'guid'=> $wp_upload_dir['url'] . '/' . basename( $name ), //<-- ЭТО ВАЖНО
    		'post_mime_type' => 'image/png',
    		'post_title' => 'my description',
    		'post_content' => 'my description',
    		'post_status' => 'inherit'
    		 );
    
    	$image_id = wp_insert_attachment($attachment, $name, $post_id);
    
    	// Make sure that this file is included, as wp_generate_attachment_metadata() depends on it.
    	require_once( ABSPATH . 'wp-admin/includes/image.php' );
    
    	// Generate the metadata for the attachment, and update the database record.
    	$attach_data = wp_generate_attachment_metadata( $image_id, $name );
    
    	wp_update_attachment_metadata( $image_id, $attach_data );
    
    }
    Padawan 5.5 лет назад

    Благодарю за помощь, вечером буду все пробовать! smile

    Padawan 5.5 лет назад

    А какая функция создает для каждого зарегистрированного в wordpress размера, отдельную картинку (файл) от уже загруженной картинки?

    Padawan 5.5 лет назад

    Всё во всем разобрался!!!! Спасибо за помощь! smile Вопрос закрыт

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация